Simptome
Atunci când efectuați operațiuni DDL, cum ar fi crearea indexului sau trunchierea tabelului în SQL Server 2016, operațiunile pot fi blocate dacă rulează o altă tranzacție DDL în aceeași bază de date.
Rezolvare
Problema a fost remediată mai întâi în următoarea actualizare cumulativă a SQL Server:
Recomandare: Instalați cea mai recentă actualizare cumulativă pentru SQL Server
Fiecare actualizare cumulativă nouă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu actualizarea cumulativă anterioară. Vă recomandăm să descărcați și să instalați cele mai recente actualizări cumulative pentru SQL Server:
Mai multe informații
Atunci când un DDL creează sau șterge un tabel sau un index, trebuie să insereze sau să șteargă ID-ul setului de rânduri al tabelului sau indexului din sysrowsets, pentru care trebuie să mențină o blocare de nivel X în intrare. Când acest lucru se face în cadrul unei tranzacții, blocarea X va fi menținută pe toată durata tranzacției.
Atunci când Tuple Mover descoperă tampoane de ștergere care se pot goli, acesta trebuie să itereze peste sysrowset-uri pentru a descoperi tabelele sau indexurile existente. Pentru a citi fiecare rând din sysrowset-uri, el trebuie să țină apăsată o blocare S de nivel de rând pe intrarea pe care o citește în prezent. Procesul de descoperire se oprește atunci când Tuple Mover găsește primul set de rânduri pe care poate lucra. În acest punct, Tuple Mover va face munca propriu-zisă de golire a tamponului de ștergere, dar, pentru a se asigura că setul de rânduri descoperit este încă valid, va menține o blocare SCH-S pe toate seturile de rânduri evaluate în timpul procesului de descoperire, până când își termină lucrul.
Sysrowsets este ordonat de ID-ul setului de rânduri, astfel încât se poate întâmpla ca Tuple Mover să scaneze mai multe seturi de rânduri existente pe care nu are nicio acțiune de făcut, dar va păstra în continuare blocarea SCH-S și ajunge la o intrare în sysrowsets pentru care nu poate obține blocarea S de nivel de rând, deoarece în prezent este modificată de o tranzacție de lungă durată care deține o blocare X pe rând. În acest punct, DDL-urile care implică modificarea ID-ului setului de rânduri sunt blocate în spatele încuietorilor SCH-S ale Tuple Mover.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.
Referințe
Aflați despre terminologia pe care o utilizează Microsoft pentru a descrie actualizările de software.