Je réalise actuellement des expériences sur une base de données SQL Server 2008. Plus précisément, j'ai une application JDBC qui utilise des centaines de threads simultanés pour exécuter des milliers de tâches, dont chacun exécute la requête suivante sur la base de données:SQL Server 2008: Obtention d'interblocages ... sans verrous
UPDATE from Table A where rowID='123'
Cependant, je suis d'obtenir une tonne d'erreurs de blocage (Exception SQL 1205) chaque fois que j'ai défini le niveau d'isolation supérieur à READ_UNCOMMITTED. Cela arrive même si je mets le verrouillage de ligne, le verrouillage de table et les conseils de verrouillage exclusifs! Et même dans Snapshot Isolation, qui n'utilise pas de verrous, je reçois toujours des erreurs de blocage.
J'ai exécuté une trace via SQL Profiler pour obtenir le graphe de blocage lorsque cela se produit, mais ce n'était pas très utile. Il a montré le processus de la victime, connecté à un «pool de threads», connecté à des centaines d'autres processus. Vous pouvez le vérifier ici:
http://i.stack.imgur.com/7rlv3.jpg
Quelqu'un at-il des conseils pour expliquer pourquoi cela se produit? Je suis devenu fou ces derniers jours en essayant de comprendre. Mon hypothèse actuelle est qu'il s'agit d'un problème lié aux threads de travail disponibles dans mon instance de base de données, à la quantité de mémoire disponible ou à quelque chose qui n'est pas lié aux verrous réels au niveau de la requête.
Merci!
[Déjà vu?] (Http://blogs.msdn.com/b/bartd/archive/2008/09/24/today-s-annoyingly-unwieldy-term-intra-query-parallel-thread- deadlocks.aspx) Est-ce que votre instruction update a un plan parallèle? –
Et dites-vous que ces blocages ** jamais ** se produisent lorsque 'READ_UNCOMMITTED' est en vigueur? Ce n'est pas du tout évident pour moi comment cela affecterait l'instruction 'update' montrée. –
Wow! Je ne m'attendais pas à une réponse aussi accablante en si peu de temps! Les interblocages se produisent toujours sous READ_UNCOMMITTED mais seulement quand il y a beaucoup, beaucoup, beaucoup plus de threads concurrents (environ 1000). Je m'excuse pour le flou. – akwok