OVH Cloud OVH Cloud

Fragmentation d'index

23 réponses
Avatar
Olivier
J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés grosse).

Est-ce que cette fragmentation est vraiment contre performantes sur des gros
traitement de recherche d'enreg ?

Je compte executer un dbreindex toute les nuits pour pallier à ce problème,
car j'ai remarqué que le dbreindex était assez efficace pour réorganiser les
index.

Est-ce que c'est la meilleur méthode, car je pourrais faire un create index
with existing, mais je ne sais pas si cela ca être plus efficace.

Merci.

10 réponses

1 2 3
Avatar
Romelard Fabrice [MVP]
Bonsoir,

Vous pouvez regarder cette procédure stockée si celle-ci correspond à votre
besoin :
-
http://www.sqlfr.com/codes/SQL-SERVER-PROCEDURE-STOCKEE-PERMETTANT-RECONSTRUIRE-TOUS-INDEXES_35836.aspx

Si c'est le cas, une planification toutes les semaines peut être effectuée
(le domanche par ex) afin de remettre à jours tous les index de toutes les
bases.

--
Cordialement.

Romelard Fabrice [MVP]


"Olivier" a écrit dans le message de
news:
J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés
grosse).

Est-ce que cette fragmentation est vraiment contre performantes sur des
gros
traitement de recherche d'enreg ?

Je compte executer un dbreindex toute les nuits pour pallier à ce
problème,
car j'ai remarqué que le dbreindex était assez efficace pour réorganiser
les
index.

Est-ce que c'est la meilleur méthode, car je pourrais faire un create
index
with existing, mais je ne sais pas si cela ca être plus efficace.

Merci.


Avatar
Fred BROUARD
Olivier a écrit:
J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés grosse).




si la table est très petite, SQL Server n'utilisera probablement pas les index
pour les requêtes.

Est-ce que cette fragmentation est vraiment contre performantes sur des gros
traitement de recherche d'enreg ?



un peu


Je compte executer un dbreindex toute les nuits pour pallier à ce problème,
car j'ai remarqué que le dbreindex était assez efficace pour réorganiser les
index.



Oui, mais DBCC DBREINDEX détruit les index pendant la reconstruction. Si des
requêtes se présentent pendant ce temps là, alors elle ne pourront utiliser les
index...


Est-ce que c'est la meilleur méthode, car je pourrais faire un create index
with existing, mais je ne sais pas si cela ca être plus efficace.



même problème.

Dans le cas évoqué ci dessus il faut faire un DBCC INDEXDEFRAG.


Merci.



A +

--

Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Romelard Fabrice [MVP]
Bonjour,

Sur les spécification de Fred, j'ai modifié la solution que j'avais proposé.
Voici donc une procédure stockée permettant de faire une défragmentation et
non une reconstruction des index.
- http://sqlfr.com/code.aspx?ID6635

N'hésitez pas à me signaler tout problème en cas.

--
Cordialement.

Romelard Fabrice [MVP]

"Olivier" a écrit dans le message de
news:
J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés
grosse).

Est-ce que cette fragmentation est vraiment contre performantes sur des
gros
traitement de recherche d'enreg ?

Je compte executer un dbreindex toute les nuits pour pallier à ce
problème,
car j'ai remarqué que le dbreindex était assez efficace pour réorganiser
les
index.

Est-ce que c'est la meilleur méthode, car je pourrais faire un create
index
with existing, mais je ne sais pas si cela ca être plus efficace.

Merci.


Avatar
Olivier
Bonjour,

j'ai essayé à plusieurs reprise de défragmenter un index, mais il reste un
pourcentage non négligeable (8%) de fragmentaition logique.

Les extend sont pas mal fragmentés.

Est-ce que c'ets normal ?

"Fred BROUARD" a écrit :



Olivier a écrit:
> J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés grosse).


si la table est très petite, SQL Server n'utilisera probablement pas les index
pour les requêtes.
>
> Est-ce que cette fragmentation est vraiment contre performantes sur des gros
> traitement de recherche d'enreg ?

un peu

>
> Je compte executer un dbreindex toute les nuits pour pallier à ce problème,
> car j'ai remarqué que le dbreindex était assez efficace pour réorganiser les
> index.

Oui, mais DBCC DBREINDEX détruit les index pendant la reconstruction. Si des
requêtes se présentent pendant ce temps là, alors elle ne pourront utiliser les
index...

>
> Est-ce que c'est la meilleur méthode, car je pourrais faire un create index
> with existing, mais je ne sais pas si cela ca être plus efficace.

même problème.

Dans le cas évoqué ci dessus il faut faire un DBCC INDEXDEFRAG.

>
> Merci.

A +

--

Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************




Avatar
Racimo
Si vous êtes amenés à reconstruire les index chaque nuit, c'est que le plan
dindexation actuel n'est PAS le premier levier de progression...Le problème
réside ailleurs:

Problème de conception (modèle non normalisé = accès IO non optimisés)
Isoler les requêtes les plus gourmandes (IO) et les plus lentes
Voir le plan d'execution des requêtes ci-dessus, déterminer les meilleurs levier de progression.



Cordialement
"Olivier" a écrit :

J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés grosse).

Est-ce que cette fragmentation est vraiment contre performantes sur des gros
traitement de recherche d'enreg ?

Je compte executer un dbreindex toute les nuits pour pallier à ce problème,
car j'ai remarqué que le dbreindex était assez efficace pour réorganiser les
index.

Est-ce que c'est la meilleur méthode, car je pourrais faire un create index
with existing, mais je ne sais pas si cela ca être plus efficace.

Merci.


Avatar
Olivier
Bonjour,

en fait c'est une procédure stockée sui pose problème, cette procédure est
assez lourde (curseurs, appel à des sp étendues, pas mal de tests ) mais elle
travaillait correctement avant (2 à 10 secondes suivant paramètre) maintenant
elle met 2 minutes. Ce qui est étrange c'est que j'ai validé ce serveur et
tout tounait bien.

Maintenant, Je me demande si je n'ai pas des locks que je ne vois pas (locks
de bas niveau) mais étant donné que mon serveur tourne trés bien, il n'y a
que des erreur dans mon appli. Ce qui me parait étrange.

Ce n'est pas facile de bien cerner l'erreur, car même aprés défragmentation
des index, la procédure ne va pas plus vite.

Est-ce que l'on peut faire une analyse des locks ? Car j'ai mis des
compteurs de perf et à chaque execution les demandes de locks sont massives,
mais cela n'entraine pas de deadlocks, et surtout marchait trés bien il y a
encore un mois.

"Racimo" a écrit :

Si vous êtes amenés à reconstruire les index chaque nuit, c'est que le plan
dindexation actuel n'est PAS le premier levier de progression...Le problème
réside ailleurs:

> Problème de conception (modèle non normalisé = accès IO non optimisés)
> Isoler les requêtes les plus gourmandes (IO) et les plus lentes
> Voir le plan d'execution des requêtes ci-dessus, déterminer les meilleurs levier de progression.

Cordialement
"Olivier" a écrit :

> J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés grosse).
>
> Est-ce que cette fragmentation est vraiment contre performantes sur des gros
> traitement de recherche d'enreg ?
>
> Je compte executer un dbreindex toute les nuits pour pallier à ce problème,
> car j'ai remarqué que le dbreindex était assez efficace pour réorganiser les
> index.
>
> Est-ce que c'est la meilleur méthode, car je pourrais faire un create index
> with existing, mais je ne sais pas si cela ca être plus efficace.
>
> Merci.


Avatar
Olivier
Est-ce que tu es sur que ta solution marche bien, car tu sais que les
statistiques sont aussi stockées dans la même tables (sysindexes) avec le
type U il me semble.

Donc effectivement c'ets interressant, mais est-ce que défragmenter les
stats est bien utile ?

Merci.


"Romelard Fabrice [MVP]" a écrit :

Bonjour,

Sur les spécification de Fred, j'ai modifié la solution que j'avais proposé.
Voici donc une procédure stockée permettant de faire une défragmentation et
non une reconstruction des index.
- http://sqlfr.com/code.aspx?ID6635

N'hésitez pas à me signaler tout problème en cas.

--
Cordialement.

Romelard Fabrice [MVP]

"Olivier" a écrit dans le message de
news:
> J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés
> grosse).
>
> Est-ce que cette fragmentation est vraiment contre performantes sur des
> gros
> traitement de recherche d'enreg ?
>
> Je compte executer un dbreindex toute les nuits pour pallier à ce
> problème,
> car j'ai remarqué que le dbreindex était assez efficace pour réorganiser
> les
> index.
>
> Est-ce que c'est la meilleur méthode, car je pourrais faire un create
> index
> with existing, mais je ne sais pas si cela ca être plus efficace.
>
> Merci.





Avatar
SQLpro [MVP]
Olivier a écrit :
Bonjour,

j'ai essayé à plusieurs reprise de défragmenter un index, mais il reste un
pourcentage non négligeable (8%) de fragmentaition logique.

Les extend sont pas mal fragmentés.

Est-ce que c'ets normal ?




tout à fait !

Seule une réindexation serait optimum. Mais 8% de frag c'est... très
négligeable. On commence à faire des defrag en général à plus de 30%...

A +




"Fred BROUARD" a écrit :


Olivier a écrit:
J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés grosse).



si la table est très petite, SQL Server n'utilisera probablement pas les index
pour les requêtes.
Est-ce que cette fragmentation est vraiment contre performantes sur des gros
traitement de recherche d'enreg ?


un peu

Je compte executer un dbreindex toute les nuits pour pallier à ce problème,
car j'ai remarqué que le dbreindex était assez efficace pour réorganiser les
index.


Oui, mais DBCC DBREINDEX détruit les index pendant la reconstruction. Si des
requêtes se présentent pendant ce temps là, alors elle ne pourront utiliser les
index...

Est-ce que c'est la meilleur méthode, car je pourrais faire un create index
with existing, mais je ne sais pas si cela ca être plus efficace.


même problème.

Dans le cas évoqué ci dessus il faut faire un DBCC INDEXDEFRAG.

Merci.


A +

--

Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************








--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
SQLpro [MVP]
Olivier a écrit :
Est-ce que tu es sur que ta solution marche bien, car tu sais que les
statistiques sont aussi stockées dans la même tables (sysindexes) avec le
type U il me semble.

Donc effectivement c'ets interressant, mais est-ce que défragmenter les
stats est bien utile ?



effectivement il faut éviter les WA_Sys... dans ce cas faire un fitre
sur la table sysindexes avec status & 64 = 64

De plus le defrag ne remet pas à jour les index. Il faut donc faire un
update stats derrière !

A +


Merci.


"Romelard Fabrice [MVP]" a écrit :

Bonjour,

Sur les spécification de Fred, j'ai modifié la solution que j'avais proposé.
Voici donc une procédure stockée permettant de faire une défragmentation et
non une reconstruction des index.
- http://sqlfr.com/code.aspx?ID6635

N'hésitez pas à me signaler tout problème en cas.

--
Cordialement.

Romelard Fabrice [MVP]

"Olivier" a écrit dans le message de
news:
J'ai des index qui sont fragmenté et ce jusqu'a 30% (table pas trés
grosse).

Est-ce que cette fragmentation est vraiment contre performantes sur des
gros
traitement de recherche d'enreg ?

Je compte executer un dbreindex toute les nuits pour pallier à ce
problème,
car j'ai remarqué que le dbreindex était assez efficace pour réorganiser
les
index.

Est-ce que c'est la meilleur méthode, car je pourrais faire un create
index
with existing, mais je ne sais pas si cela ca être plus efficace.

Merci.










--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
SQLpro [MVP]
1) es tu en hyper threading ???
2) peut être peut tu forcer les locks en ligne dans ce cas :
a) sp_indexoption +
b) augmenter la taille du pool de locks.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
1 2 3