2009-05-30 10 views
5

J'ai lu ce problème de verrouillage Lorsque les tables de base de données commencent à accumuler des milliers de lignes et que plusieurs utilisateurs commencent à travailler simultanément sur la même table, les requêtes SELECT sur les tables commencent à produire des conflits de verrous.comment résoudre le problème de blocage?

Ce problème d'interblocage est-il lié à la mise à jour de TransactNo? Si vous connaissez ce problème, faites le moi savoir pls. Merci d'avance.

Répondre

3

Vous n'avez pas fourni assez d'informations pour répondre directement à votre question.

Mais la plupart des verrouillages et des blocages peuvent être réduits (ou même éliminés) en ayant les index 'corrects' pour couvrir votre charge de travail.

En raison de la maintenance régulière d'un travail de maintenance d'index?

Si vous avez SELECT s qui ne ont pas besoin d'être précis à 100% (à savoir permettre à sale lit etc), vous pouvez exécuter certains SELECTS avec WITH(NOLOCK), qui est identique à un niveau d'isolement READ UNCOMMITED. S'il vous plaît Note: Je ne suggère pas que vous placez WITH(NOLOCK) partout; seulement sur les SELECTS qui n'ont pas besoin de données intactes à 100%.

4

Un blocage peut survenir pour de nombreuses raisons. Vous devrez donc faire quelques devoirs si vous voulez être aidé et nous dire ce qui cause l'impasse, c'est-à-dire. Quels sont les lots impliquent l'exécution de l'impasse, quelles sont les ressources impliquées et ainsi de suite. Le Profiler deadlock event graph est toujours un bon endroit pour commencer l'enquête. Si j'essaie de tirer dans le noir, ce qui se passe, c'est que vos requêtes et index ne sont pas réglés correctement, donc la plupart de vos opérations de lecture (et peut-être certaines des écritures) sont des balayages de table complets. avec des mises à jour. Cela peut causer deadlocks by order of index access, blocage par ordre des opérations, blocage par escalade et ainsi de suite. Une fois que vous identifiez la cause de l'interblocage, alors l'action appropriée pour l'enlever peut être prise. Les cas où l'action appropriée est de recourir à des lectures sales sont extrêmement rares.

BTW Je ne suis pas sûr de ce que vous voulez dire par 'TransactNo updlock'. Est-ce que vous posez des questions sur le S-U/U-S asymmetry of the U locks?

4

Un problème commun avec une forte isolation est escalade de verrouillage blocages dus à la le scénario suivant; c'est à dire.(Où X est une ressource, telle qu'une rangée)

  • SPID un lit X - obtient une lecture de verrouillage
  • SPID b lit X - obtient un verrou de lecture
  • SPID une tentative de mise à jour X - bloqués par verrouillage de lecture b, a donc attendre
  • SPID tentatives b pour mettre à jour X - bloqué par un verrou est lu, a donc attendre

Deadlock! Ce scénario peut être évité en prenant plus serrures:

  • SPID un lit comme suit X avec (UPDLOCK) spécifié - obtient un verrou exclusif
  • SPID b tente de lit X - bloqué par un est verrou exclusif, donc doit attendre
  • SPID une tentative de mise à jour X - fin
  • ... (SPID un commits/rouleaux arrière et libère le verrou à un moment donné)
  • ... (SPID b fait ce qu'il voulait faire)
+0

L'escalade de verrouillage est lorsque le moteur décide d'abandonner en prenant des verrous granulaires individuels et décide d'obtenir un verrou grossier de niveau supérieur. L'escalade de verrouillage va des verrous de niveau ligne aux verrous de niveau table. Un signe d'un blocage d'escalade de verrou est l'implication de verrous (verrous d'intention) car l'escalade tente d'obtenir de vrais verrous sur la table et entrera en conflit avec les différents verrous d'intention (S-IX, S-IS) déjà placés dessus . Votre exemple est la lecture canonique suivie d'un cas d'écriture, elle n'est pas liée à l'escalade. –

+0

Si j'ai utilisé la mauvaise terminologie, alors je m'excuse; mais le scénario (quel que soit le nom) est un problème commun. –

3

Je vais jeter mes articles et messages dans le mélange sur les blocages:

http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Deadlock/default.aspx

J'ai aussi une série de vidéos sur le dépannage interblocage sur JumpstartTv.com ainsi:

http://jumpstarttv.com/profiles/1379/Jonathan-Kehayias.aspx

Les blocages peuvent être difficiles à résoudre, mais à moins que vous ne publiiez vos informations de graphe de blocage, il n'y a pas moyen de faire plus que d'offrir des liens vers des messages et des informations sur la résolution des morts serrures.

8

Les blocages peuvent survenir pour de nombreuses raisons et, parfois, le dépannage des blocages peut être plus un art qu'une science. Ce que j'utilise pour trouver et éliminer les blocages, en dehors de SQL Profiler, est un outil léger qui donne une représentation graphique des blocages au fur et à mesure qu'ils se produisent. Lorsque vous voyez une impasse, vous pouvez explorer et obtenir des informations précieuses. Deadlock Detector - http://www.sqlsolutions.com/products/sql-deadlock-detector

C'est un outil simple, mais pour moi, il fait exactement ce qu'il est censé faire. Une chose: la première fois que je l'ai utilisé, j'ai dû attendre 15 minutes pour que l'outil rassemble suffisamment de métriques pour commencer à montrer les blocages.

Questions connexes