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.