KB3168793 – ISPRAVKA: Nije moguće kreirati ili izbrisati tabelu ili indeks kada je druga DDL transakcija pokrenuta u istoj bazi podataka u programu SQL Server 2016

Primenjuje se na
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)

Simptomi

Kada izvršavate DDL operacije kao što su kreiranje indeksa ili skraćivanje tabele u sistemu SQL Server 2016, operacije mogu biti blokirane ako je u istoj bazi podataka pokrenuta druga DDL transakcija.

Rešenje

Problem je prvi put rešen u sledećoj kumulativnoj ispravci sistema SQL Server:

Preporuka: Instalirajte najnoviju kumulativnu ispravku za SQL Server

Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Preporučujemo da preuzmete i instalirate najnovije kumulativne ispravke za SQL Server:

      

Više informacija

Kada DDL kreira ili briše tabelu ili indeks, on mora da umetne ili izbriše ID tabele ili skupa redova iz tabele ili indeksa, za koje mora da zadrži broj X zaključavanja reda na stavci. Kada se to uradi unutar transakcije, X Lock će biti zadržan tokom trajanja transakcije.

Kada kombinacija za premeštanje otkrije bafere za brisanje koje se mogu isprazniti, on mora da iterira preko sysrowsets da bi otkrio postojeće tabele ili indekse. Da bi čitao svaki red iz sysrowset, on mora da drži nivo reda S lock na unosu koji trenutno glasi. Proces otkrivanja se zaustavlja kada kombinacija za pokretanje pronađe prvi skup redova na kojem može da radi. U ovom trenutku Tuple Mover će uraditi stvarni posao pražnjenja bafera za brisanje, ali da bi se uverio da je otkriveni skup redova i dalje važeći, on će zadržati SCH-S zaključavanje na svim skupovima redova koje je procenio tokom procesa otkrivanja dok ne završi svoj rad.

Sysrovsets je uređen po ID-u redova, tako da se može dogoditi da Tuple Mover skenira više postojećih skupova redova na kojima nema nikakvu radnju da uradi, ali će i dalje držati SCH-S zaključavanje i dolazi do unosa u sysrovsets za koje ne može da stekne nivo reda S lock, jer se trenutno menja dugotrajnom transakcijom koja drži Ks lock na redu. U ovom trenutku DDL-ovi koji uključuju promenu ID-a rovseta blokirani su iza SCH-S brava Tuple Mover-a.

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.

Reference

Saznajte više o terminologiji koju Microsoft koristi za opisivanje softverskih ispravki.