Symptomen
Neem het volgende scenario:
-
U hebt een database van Microsoft SQL Server 2012 waarop de opties ALLOW_SNAPSHOT_ISOLATION en READ_COMMITTED_SNAPSHOT zijn ingeschakeld.
-
U hebt ten minste drie gelijktijdige query's die in dezelfde tabel worden uitgevoerd.
-
De query's gebruiken de queryaanwijzing (TABLOCK, UPDLOCK) .
-
Elke query is in een expliciete Tran -instructie opgenomen, maar de instructie commit Tran wordt niet uitgevoerd.
Wanneer de eerste query in dit scenario wordt vastgelegd, wordt een van de andere query's deadlock. Wanneer READ_COMMITTED_SNAPSHOT samen met de query hints van TABLOCK en UPDLOCK , hebben de sessies de tabel voor de tabel. De deadlock doet zich voor wanneer de twee gelijktijdige sessies proberen de IX-slots te converteren naar X-vergrendelingen. Als READ_COMMITTED_SNAPSHOT is uitgeschakeld, krijgen de sessies zes vergrendelingen en worden er geen deadlock weergegeven wanneer ze worden geconverteerd naar X-vergrendelingen. Met de hotfix wordt dit gedrag verholpen door LCK_M_SCH_S sloten te verlenen in plaats van IX sloten wanneer READ_COMMITTED_SNAPSHOT wordt gebruikt met TABLOCK -en UPDLOCK -hints.Opmerking Dit probleem doet zich ook voor in Microsoft SQL Server 2008 R2. Er wordt binnenkort een hotfix voor SQL Server 2008 R2 uitgebracht.
Oplossing
Het probleem is voor het eerst opgelost in de volgende cumulatieve update van SQL Server.
Cumulatieve update 8 voor SQL Server 2012 SP1 /en-us/help/2917531
Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige cumulatieve update. Bekijk de nieuwste cumulatieve updates voor SQL Server:
Status
Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.