web-dev-qa-db-fra.com

Index avec des attelles de serrure élevée - comment réparer

J'ai couru dbo.sp_BlitzIndex et avoir 4 index un peu similaires sur la table principale de ma base de données. Chacun a un grand nombre d'attentes et de tentatives d'escalade. Je ne suis pas sûr d'où ça vient. Je n'ai pas d'index manquant. Je ne vois pas les recherches sur cette table en prenant longtemps, donc pas sûr que ceux-ci proviennent de SELECTS ou d'INSERTS. Besoin de quelques pointeurs sur où regarder ensuite.

Core.tblcase.idx_tblase_bclosed_nuserid_primaryagent (2):
Le verrou en rangée attend: 1; Durée totale: 0 secondes; Avg Durée: 0 secondes;
Verrouillage de page attend: 85; Durée totale: 92 minutes; Avg Durée: 1 minutes;
Tentatives d'escalade de verrouillage: 100 965;
Escalations réelles: 1. Index de NC sur la table: 1

Core.tblcase.idx_tblase_bclosed_nactionID_LAST_NWORKFLOWID (27):
Le verrou en rangée attend: 3; Durée totale: 26 secondes; AVG Durée: 8 secondes;
verrouillage de page attend: 15; Durée totale: 10 minutes; Avg Durée: 42 secondes;
Tentatives d'escalade de verrouillage: 31 908;
[.____] Les escalades réelles: 0. Index de NC sur la table: 1

Core.tblcase.idx_tblase_bclosed_nworkflowid_nactionID_LAST (28):
verrouillage de page attend: 112; Durée totale: 85 minutes; Avg Durée: 46 secondes;
Tentatives d'escalade de verrouillage: 31 748;
[.____] Les escalades réelles: 0. Index de NC sur la table: 1

Core.tblcase.idx_tblcase_bclosed_ncaseid_inc (35):
Le verrou en rangée attend: 2; Durée totale: 13 minutes; Durée moyenne: 6 minutes;
verrouillage de page attend: 307; Durée totale: 399 minutes; Avg Durée: 1 minutes;
Tentatives d'escalade de verrouillage: 43 090;
[.____] Les escalades réelles: 0. Index de NC sur la table: 1

4
MikeC

Note latérale Premier - Hmm, il y a quelque chose d'un peu méfiant dans ces résultats. Ils disent tous la même table, mais en même temps, ils disent "index nc sur la table: 1". Cela signifie que nous pensons qu'il n'y a qu'un seul index sur la table - mais vous montrez 4 ici. Celles-ci pourraient être dans différentes bases de données peut-être, ou peut-être un bogue dans le code sp_blitzindex.

Cela de côté, vous avez quelques questions différentes ici.

Comment puis-je savoir si j'ai un problème de blocage? Regardez les statistiques d'attente, qui suivent ce que votre serveur SQL a été attendu. Mon outil préféré personnel pour cela est SP_BLITZ @CHECKSERVERINFO = 1, @OutPutType = 'Markdown' Parce que vous pouvez publier les résultats ici sur la pile de votre question. (Disclaimer: Je travaille pour la société qui a commencé ces scripts.) L'une des sections indiquera vos attentes les plus significatives - concentrez-vous sur ces premiers. Si vos types d'attente principaux incluent LCK *, vous avez probablement un problème de blocage.

Comment puis-je trouver des requêtes qui prennent des serrures? Celui-ci peut être un peu difficile sans surveiller le logiciel. Je commencerais avec sp_blitzcache @sortororder = 'Durée' Qui vous montrera les requêtes les plus longues, ce qui peut parfois signaler les requêtes impliquées dans le blocage. Vous ne pouvez pas vraiment filtrer par table, cependant, au moins pas rapidement.

Comment concevoir les bons indices pour soutenir ces questions? C'est une sorte de grande question. Généralement, vous voulez autant d'index que vous devez prendre en charge vos charges de travail, mais pas tellement que les opérations supprimées/mise à jour/insertion (DUI) ralentissent en raison du grand nombre de serrures à obtenir. Si votre table n'aura vraiment qu'un indice, les requêtes DUI sont probablement en train de faire des analyses de table afin de trouver les rangées qu'ils souhaitent mettre à jour. Il est temps de regarder comment vous accédez à ces tables lorsque vous effectuez des mises à jour.

Par exemple, disons que vous avez les pages blanches classiques du répertoire téléphonique - organisées par nom de famille, prénom. Si vous essayez de mettre à jour tous les utilisateurs dont le prénom est 'Brent', vous devrez numériser l'intégralité du répertoire, et vous pouvez vous retrouver avec quelques situations de verrouillage méchantes. Vous voudrez créer un index distinct sur le prénom afin que vous puissiez trouver rapidement les lignes que vous devez mettre à jour, puis sortir de la table.

6
Brent Ozar