J'ai essayé de résoudre différents blocages que nous voyons en production. Nous avons activé le suivi des interblocages. Les traces montrent beaucoup de blocage sur serrures comme ceci:Examiner KEYLOCKs dans SQL Server 2005
01/15/2010 08:25:07,spid15s,Unknown,keylock hobtid=72057594047758336 dbid=2
objectname=tempdb.dbo.MyTable indexname=IX_MyTable id=lock36977900 mode=X
associatedObjectId=72057594047758336
D'après ce que je comprends, le verrouillage des touches verrouille l'index pour empêcher les enregistrements d'être insérés, mis à jour ou supprimé pendant que la transaction fait ses propres insertions, mises à jour, et supprime.
Je suppose qu'il existe des plans de requête incorrects provoquant la demande de mauvais verrous. Je peux exécuter les mêmes requêtes sur mon système de développement et exécuter sp_lock pour examiner les verrous requis par la requête, et je vois quelques KEYLOCKs dans la liste. Comment examine-t-on la gamme de clés que le KEYLOCK bloquait?
Juste une petite note. Cela fonctionnera uniquement pour l'index cluster ou le segment de mémoire. Si la clé que vous recherchez est dans un index non cluster, vous devez utiliser l'indicateur SELECT comme ceci: 'FROM myTable WITH (INDEX (myIndexName))' –
Pour MSSQL2014, il est légèrement changé en WHERE %% LOCKRES %% = ' (0000ABCDEFAB) ' –