KB3168793 - FIX: Kan geen tabel of index maken of verwijderen wanneer er een andere DDL-transactie wordt uitgevoerd in dezelfde database in SQL Server 2016

Van toepassing op
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Symptomen

Wanneer u DDL-bewerkingen uitvoert, zoals een tabel maken, indexeren of afkappen in SQL Server 2016, worden de bewerkingen mogelijk geblokkeerd als er een andere DDL-transactie in dezelfde database wordt uitgevoerd.

Oplossing

Het probleem werd voor het eerst opgelost in de volgende cumulatieve update van SQL Server:

Aanbeveling: Installeer de meest recente cumulatieve update voor SQL Server

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingspatches die deel uitmaakten van de vorige cumulatieve update. We raden u aan de meest recente cumulatieve updates voor SQL Server te downloaden en te installeren:

      

Meer informatie

Wanneer een DDL een tabel of index maakt of verwijdert, moet de rijset-id van de tabel of index worden ingevoegd in of verwijderd uit sysrowsets, waarvoor een rijniveau X-vergrendeling op de invoer moet worden geplaatst. Wanneer dit binnen een transactie gebeurt, wordt het X-slot vastgehouden voor de duur van de transactie.

Wanneer Tuple Mover doorspoelbare verwijderbuffers ontdekt, moet het sysrowsets herhalen om bestaande tabellen of indexen te detecteren. Om elke rij van sysrowsets te lezen, moet hij een rijniveau S-vergrendeling op de huidige waarde aanhouden. Het ontdekkingsproces stopt wanneer Tuple Mover de eerste rijenset vindt waaraan het kan werken. Op dit punt zal Tuple Mover het eigenlijke werk doen van het leegmaken van de verwijderbuffer, maar om er zeker van te zijn dat de ontdekte rijset nog steeds geldig is, zal het een SCH-S-vergrendeling houden op alle rijsets die het tijdens het ontdekkingsproces heeft geëvalueerd totdat het zijn werk heeft voltooid.

Sysrowsets wordt geordend op de rowset-id, dus het kan gebeuren dat Tuple Mover meerdere bestaande rowsets heeft gescand waarop het geen actie hoeft uit te voeren, maar nog steeds SCH-S-vergrendeling houdt en het komt bij een item in sysrowsets waarvoor het geen rijniveau S-vergrendeling kan krijgen, omdat het momenteel wordt gewijzigd door een langlopende transactie die een X-vergrendeling op de rij houdt. Op dit punt zijn DDL's met betrekking tot het wijzigen van rijset-id's geblokkeerd achter de SCH-S-sloten van Tuple Mover.

Status

Microsoft heeft bevestigd dat dit een probleem is bij de Microsoft-producten die worden vermeld in de sectie Van toepassing op.

Meer informatie

Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.