web-dev-qa-db-fra.com

Problème de fragmentation d'index Après la désactivation du verrouillage de niveau de page pour un index

J'ai un index qui a le verrouillage de niveau de page désactivé et j'ai maintenant des problèmes de fragmentation d'index pour cet indice.

J'étais conscient que je ne serais pas capable de Reorganize l'index, mais je croyais que je pourrais pouvoir rebuild l'index.

Maintenant, je pense que la reconstruction ne fonctionne pas aussi. J'utilise le facteur de remplissage par défaut de 100. Ma base de données est énorme, donc je ne veux pas que la taille de la table/DB soit augmentée en donnant un facteur de remplissage de 80% ou moins. En ne fonctionnant pas, je veux dire que la fragmentation AVG reste la même chose après avoir exécuté le script de OLA la nuit précédente.

n petit fond sur la raison pour laquelle le verrouillage de niveau de page est désactivé.

Je reçois beaucoup de transaction deadlocks sur cet indice dans cette table particulière. Cette table était un peu une table de fait où insert, update and delete se passait à chaque instant. Et il y a quelques foreign key relation avec quelques autres tables avec CASCADE deletes. Donc, je reçois beaucoup de verrous/d'impasse et après avoir désactivé la serrure de niveau de la page, j'ai pu me débarrasser de toutes ces impasses.

J'ai commencé à utiliser le script de Ola Hallengren pour Index maintenance et j'ai appliqué l'index de reconstruction pour tous ces index pour lesquels la réorganisation de l'indice ne fonctionne pas. Mais j'ai remarqué que l'index de reconstruction ne fonctionne pas aussi.

Maintenant, je vois un avgpagefragmentaiton du 95.9413 et le nombre de pages de 1196826 pour l'indice, ce qui n'est pas bon.

Info supplémentaire :

J'utilise le script de Ola Hall comme indiqué ci-dessous.

 EXECUTE dbo.IndexOptimize
    @Databases = 'DB_NAME',
    @FragmentationLow = NULL,
    @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE',
    @FragmentationHigh = ''INDEX_REORGANIZE,INDEX_REBUILD_ONLINE'',
    @FragmentationLevel1 = 5,
    @FragmentationLevel2 = 30,
    @SortInTempdb = 'Y',
    @MaxDOP = 0,
    @WaitAtLowPriorityMaxDuration = 0,
    @WaitAtLowPriorityAbortAfterWait= 'NONE',
    @Indexes = 'DB_NAME.[dbo].TB1,DB_NAME.[dbo].TB2'

Ma question est de savoir comment réduire la fragmentation dans un index si le verrouillage de niveau de page est désactivé pour cet index?

7
user9516827

La réponse à votre requête est enterrée dans une documentation :

La reconstruction de l'index en ligne peut augmenter la fragmentation lorsqu'il est autorisé à exécuter avec Max DOP> 1 et allemand_page_locks = Off Off Off Options.

Les raisons de cela sont expliquées en détail dans le message suivant Blog MSDN:

Comment fonctionne: l'index en ligne reconstruit - peut provoquer une fragmentation accrue

Quelques options pour résoudre le problème dans votre situation, où les serrures de page sont désactivées pour l'index, sont les suivantes:

  • reconstruire hors ligne
  • reconstruire à MAXDOP 1
13
Josh Darnell