MSSQLSERVER_1205

S’applique à : SQL ServerAzure SQL Database Azure SQL Managed Instance

Détails

Attribut Valeur
Nom du produit SQL Server
ID de l’événement 1205
Source de l’événement MSSQLSERVER
Composant SQLEngine
Nom symbolique LK_VICTIM
Texte du message La transaction (ID de processus %d) a été bloquée sur les ressources %.*ls par un autre processus et a été choisie comme victime. Relancez la transaction.

Explication

Des ressources font l’objet d’accès dans un ordre conflictuel sur des transactions distinctes, ce qui provoque un interblocage. Par exemple :

  • Transaction1 met à jour Table1.Ligne1, tandis que Transaction2 met à jour Table2.Ligne2.
  • Transaction1 tente de mettre à jour Table2.Row2 , mais est bloquée, car Transaction2 n’a pas encore validé et n’a pas publié ses verrous
  • Transaction2 tente maintenant de mettre à jour Table1.Row1 , mais est bloquée, car Transaction1 n’a pas validé et n’a pas publié ses verrous
  • Un blocage survient car Transaction1 attend que Transaction2 se termine, alors que Transaction2 attend que Transaction1 se termine.

Le système va détecter cet interblocage et choisir une des transactions impliquées comme « victime ». Il va ensuite émettre ce message d’erreur, en annulant la transaction de la victime. Pour plus d’informations, consultez Deadlocks.

Action de l’utilisateur

Les blocages sont dans la plupart des cas des problèmes liés à l’application et nécessitent que les développeurs d’applications apportent des modifications de code. Une approche lorsque vous recevez l’erreur 1205 consiste à réexécuter les requêtes. Consultez ce blog pour obtenir un exemple de nouvelle tentative : gérer le blocage et réexécuter la requête : application Deadlock Simulator pour les développeurs : Comment gérer un problème d’interblocage SQL dans votre application

Vous pouvez également réviser l'application pour éviter les blocages. La transaction qui a été choisie comme victime peut être retentée et réussira probablement, en fonction des opérations qui sont exécutées simultanément.

Pour empêcher ou éviter l’apparition de blocages, faites en sorte que toutes les transactions accèdent aux lignes dans le même ordre (Table1, puis Table2). De cette façon, bien qu’un blocage puisse survenir, un interblocage sera évité.

Pour plus d’informations, consultez Gestion des interblocages et réduction des interblocages.