Réduire l'impasse sur le niveau de PAGE sur la requête de mise à jour sur MS SQL
J'ai de drôles de blocage causé par un stupide simple requête SQL UPDATE, sur une plaine de table, en vertu de défaut "LIRE COMMIS" des transactions.
UPDATE table SET column=@P1 WHERE PK=@P2
Colonne PK
est varchar(11)
, a un index cluster.
pas de déclencheur ou de la table de relation..etc sur la table.
J'ai fait de rechercher et de trouver que le blocage se produire sur la "PAGE", et non à la LIGNE/niveau record.
Ensuite, je trouve que pour chaque requête de mise à jour, il prend 100(et plus) les verrous de PAGE. (Il ne fait pas de sens pour moi parce que je suis la mise à jour d'une ligne à la fois)
Est-il un moyen pour empêcher le blocage en cours de se produire? Ou, comment pouvez réduire le nombre de verrous qu'il faut pour une seule ligne de mise à jour sans l'aide du curseur?
--
Merci pour votre suggestion.
J'avais essayé de reconstruire l'index à quelques reprises, à forte et à faible facteur de remplissage. J'avais essayé de rendre les processus de mise à jour de position différente/tranche. Mais rien n'a été amélioré ou pire.
--
J'ai essayé le générateur de profils SQL Server. Je captued certains "Lock:Blocage de la Chaîne" et "Lock:Blocage",
mais pas de "Blocage Graphique" a été capturé. Les deux côtés sont en train de faire la mise à jour simple requête en lecture engagée, le mode auto-commit.
Lock:Deadlock Chain 17887475 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange Lock:Deadlock Chain 17887476 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:438102 265006271 0 0X56AF060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887477 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange Lock:Deadlock Chain 17887478 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 54 1:426206 265006240 0 0XDE80060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887479 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426206 265006271 0 0XDE80060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887480 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange Lock:Deadlock Chain 17887481 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 54 1:426066 265006240 0 0X5280060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887482 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426066 265006271 0 0X5280060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887483 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange Lock:Deadlock Chain 17887484 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:425614 265006271 0 0X8E7E060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887485 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange Lock:Deadlock Chain 17887486 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426687 265006271 0 0XBF82060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887487 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange
Lock:Deadlock Chain 17887488 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:425392 265006271 0 0XB07D060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887489 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange
Lock:Deadlock Chain 17887491 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange
Lock:Deadlock Chain 17887493 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange
Lock:Deadlock Chain 17887494 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:435792 265006271 0 0X50A6060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock Chain 17887495 1 0X01 4 myserver 2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock 0 971497 102 - Resource type Exchange
Lock:Deadlock Chain 17887496 1 0X01 4 myserver 2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:438206 265006271 0 0XBEAF060001000000000000001B0006 27 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock
Lock:Deadlock 17887497 myuser 0XCD85FBB269700B4AA2F4E8579D118999 209 myserver myuser 2008-11-28 10:16:45.930 1:426206 265006271 myapps 0 0XDE80060001000000000000001B0006 123 27 281 2008-11-28 10:16:46.210 myclient 0 - LOCK 4 - U 0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971498
OriginalL'auteur Dennis C | 2008-11-26
Vous devez vous connecter pour publier un commentaire.
Vous avez 2 options pour réduire l'escalade de verrous:
1) ajouter l' (VERROU) indice de demander à sql server pour prendre une granularité plus fine des serrures (votre kilométrage peut varier:
2) mettre à jour les lignes dans un ordre aléatoire, ce qui réduit la probabilité de verrous de ligne progressive verrous de page.
Aussi, veiller à ce que l'index de cette table sont à jour permet souvent de réduire de verrouillage. Que peut laisser un facteur de Remplissage (90) si vous allez faire beaucoup d'inserts.
OriginalL'auteur Mitch Wheat
Vous avez un profil de trace?
Feu du générateur de profils SQL et créer un standard de trace de ces événements ajouté:
Doivent fournir des détails de la nature précise de l'impasse.
OriginalL'auteur Mitch Wheat
Dans la normale, simple cas où ce type de begavior n'est pas souvent vu. Ma question pour vous : quelle est "l'autre côté" de cette transaction? Quel est l'autre instruction de mise à jour qui est en cours d'exécution et à l'origine de ce blocage? Qui, je pense, sera la clé du diagnostic de ce problème. Honnêtement, mon argent est sur cette les autres, jusqu'à présent non identifié requête étant le coupable. Et je suis à las vegas maintenant...
Et même, je dois débrancher/rebrancher pour s'assurer qu'aucun verrou caché/transaction.
OriginalL'auteur Dave Markle
Ce que les instructions select à partir d'une même table ET même les enregistrements ne se produisent à l'intérieur de la même transaction avant la mise à jour de déclaration? Utilisation (updlock) les indicateurs de verrouillage dans ces sélectionne.
OriginalL'auteur Arvo
avez-vous des DÉCLENCHEURS de mise à JOUR sur la table? Si oui, l'action de la gâchette, pourrait être à l'origine de votre blocage.
OriginalL'auteur
J'ai enfin pu faire une solution de contournement en utilisant cusror dans une procédure stockée.
Mais il est encore intéressant de noter que la façon dont la PAGE de verrouillage se produire et comment le résoudre.
Après quelques recherche sur Google, il y a quelques autres personnes ont le même problème et ils(à partir de MSDN forum) suggèrent de désactiver le parallélisme dans SQL Server 2005, mais je n'ai jamais eu la chance d'essayer.
OriginalL'auteur Dennis C