Symptomen
Neem het volgende scenario:
-
U hebt een database met de opties ALLOW_SNAPSHOT_ISOLATION en READ_COMMITTED_SNAPSHOT ingeschakeld in microsoft SQL Server 2008 R2.
-
U voert een Select -instructie met TABLOCK en UPDLOCK -hints uit op basis van een tabel in de database.
-
De Select -instructie is in een expliciete transmissie met een EXPLICIETe Tranopgenomen, maar commit Tran wordt niet uitgevoerd.
-
Twee meer van de query's die beginnen met dezelfde querysuggesties bevinden zich in de expliciete transactie.
In dit scenario, wanneer de eerste query wordt vastgelegd, is een van de andere query's deadlock.
Oorzaak
Het probleem kan zich voordoen omdat de deadlock in SQL Server in een van de volgende scenario's niet juist wordt gemeld:
-
Wanneer ALLOW_SNAPSHOT_ISOLATION en READ_COMMITTED_SNAPSHOT zijn ingeschakeld voor een database, kunnen meerdere query's met dezelfde transactie worden gerapporteerd als een deadlock wanneer een van deze is voltooid.
-
Wanneer ALLOW_SNAPSHOT_ISOTION is ingeschakeld en de hints TABLOCK en UPDLOCK worden gebruikt, worden in de tweede en derde Select met behulp van de tweede en derde Select -instructie de beschikbare sloten met de intentie geconverteerd naar X. De voordelen van de voor uitgebrachte deadlock wordt beëindigd wanneer er wordt geprobeerd om te converteren naar de X.
-
Wanneer ALLOW_SNAPSHOT_ISOLATION is uitgeschakeld, krijgen de tweede en derde query een zes keer. Wanneer de zes lock wordt geconverteerd naar X, is dit slechts een blokkerings scenario, geen deadlock.
Oplossing
Het probleem is voor het eerst opgelost in de volgende cumulatieve update van SQL Server. Na het toepassen van de hotfix, moet SQL Server het probleem oplossen door te registreren als een hint voor het doorvoeren van een schrijfactie of NOLOCK wordt gevonden voor de database en de query. Deze informatie wordt gebruikt om het juiste type slot te selecteren om de situatie correct af te handelen, in plaats van imgeschikte deadlock.
Cumulatieve update 11 voor SQL Server 2008 R2 SP2 /en-us/help/2926028
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.