Deadlock-Fehler mit Microsoft SQL Server
Produkt
B2B by Practice oder andere Services, die eine MSSQL Datenbank verwenden
Symptom
Bei paralleler Verarbeitung von mehreren Nachrichten kommt es zu Datenbankfehler:
com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 62) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Fehler
Fehlerhafte Konfiguration der Datenbank-Einstellungen “READ COMMITTED SNAPSHOT”, “max degree of parallelism” und “cost threshold for parallelism”. Wobei READ COMMITTED SNAPSHOT
die entscheidenste Eigenschaft ist.
Lösung
Einstellungen für die Parallelisierung überprüfen und anpassen Added: Microsoft Empfehlung hierzu siehe: https://docs.microsoft.com/de-de/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option?view=sql-server-ver15#guidelines
Umsetzung
READ_COMMITTED_SNAPSHOT
Überprüfen, ob die Einstellung auf ON
(1) steht.
SELECT is_read_committed_snapshot_on
FROM sys.databases
WHERE name = 'MyDatabase';
Bei Bedarf die Einstellung auf ON
setzen:
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
“max degree of parallelism” und “cost threshold for parallelism”
Die Einstellungen überprüfen mit sp_configure
Einstellungen von DB Administratoren anpassen lassen. Mit diesen Werten gab es den Fehler nicht mehr:
max degree of parallelism = 3
cost threshold for parallelism = 25
Interne Referenz: ZEP-30299, BTOB-13001