KB3168793 – RJEŠENJE: nije moguće stvoriti ili izbrisati tablicu ni indeks kada je u istoj bazi podataka u programu SQL Server 2016 pokrenuta neka druga DDL transakcija

Primjenjuje 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

Prilikom izvođenja DDL operacija kao što su stvaranje indeksa ili skraćivanje tablice u sustavu SQL Server 2016 operacije mogu biti blokirane ako se u istoj bazi podataka izvodi neka druga DDL transakcija.

Rješenje

Problem je prvi put riješen u sljedećem kumulativnom ažuriranju sustava SQL Server:

Preporuka: instalirajte najnovije kumulativno ažuriranje za SQL Server

Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Preporučujemo da preuzmete i instalirate najnovija kumulativna ažuriranja za SQL Server:

      

Dodatne informacije

Kada DDL stvori ili izbriše tablicu ili indeks, potrebno je umetnuti ili izbrisati ID skupa redaka tablice ili indeksa iz skupa redaka sysrowsets, za koje mora držati redak razine X lock na unosu. Kada se to učini unutar transakcije, X Lock će se zadržati tijekom trajanja transakcije.

Kada aplikacija Tuple Mover otkrije međuspremnike brisanja koji se mogu isprazniti, ona mora iterirati preko sysrowsets da bi otkrila postojeće tablice ili indekse. Da bi pročitao svaki redak iz sysrowseta, on mora držati redak razine S lock na unosu koji trenutno čita. Proces otkrivanja prekida se kada pokretač n-torke pronađe prvi skup redaka na kojem može raditi. U ovom će trenutku Tuple Mover obaviti stvarni posao pražnjenja međuspremnika za brisanje, ali kako bi se uvjerio da je otkriveni skup redaka i dalje valjan, zadržat će SCH-S zaključavanje na svim skupovima redaka koje je procijenio tijekom postupka otkrivanja sve dok ne završi svoj rad.

Sysrowsets je poredan prema ID-u skupa redaka, stoga se može dogoditi da Tuple Mover skenira više postojećih skupova redaka na kojima nema akciju za napraviti, ali će i dalje držati SCH-S Lock i dođe do unosa u sysrowsets za koji ne može dohvatiti razinu S lock, jer se trenutno mijenja dugotrajnom transakcijom koja drži X lock na retku. U ovom trenutku DDL-ovi koji uključuju promjenu ID-a skupa redaka blokirani su iza SCH-S brava Tuple Mover-a.

Status

Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.

Reference

Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.