KB3168793 — POPRAWKA: Nie można utworzyć lub usunąć tabeli bądź indeksu, jeśli w tej samej bazie danych w SQL Server 2016 r. jest uruchomiona inna transakcja DDL

Dotyczy
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)

Objawy

Podczas wykonywania operacji DDL, takich jak tworzenie indeksu lub obcinanie tabeli w programie SQL Server 2016, operacje te mogą zostać zablokowane, jeśli w tej samej bazie danych jest uruchomiona inna transakcja DDL.

Rozwiązanie

Ten problem został po raz pierwszy rozwiązany w następującej aktualizacji zbiorczej programu SQL Server:

Zalecenie: zainstalowanie najnowszej aktualizacji zbiorczej dla programu SQL Server

Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Zalecamy pobranie i zainstalowanie najnowszych aktualizacji zbiorczych dla programu SQL Server:

      

Więcej informacji

Gdy biblioteka DDL tworzy lub usuwa tabelę lub indeks, musi wstawić lub usunąć identyfikator zestawu wierszy tabeli lub indeksu z zestawów systemowych, dla których musi utrzymywać blokadę X na poziomie wiersza dla wpisu. Gdy odbywa się to wewnątrz transakcji, X lock będzie utrzymywany przez czas trwania transakcji.

Gdy narzędzie Tuple Mover odnajduje opróżniane bufory usuwania, musi iterować po zestawach systemowych, aby odnaleźć istniejące tabele lub indeksy. Aby odczytać każdy wiersz z zestawów systemowych, musi trzymać blokadę poziomu wiersza S na wpisie, który aktualnie czyta. Proces odnajdywania zatrzymuje się, gdy narzędzie TupleMover znajdzie pierwszy zestaw wierszy, na którym może pracować. W tym momencie moduł Tuple Mover wykona rzeczywistą pracę polegającą na opróżnieniu bufora usuwania, ale w celu upewnienia się, że odnaleziony zestaw wierszy jest nadal prawidłowy, będzie utrzymywać blokadę SCH-S we wszystkich zestawach wierszy, które ocenił podczas procesu odnajdywania, dopóki nie zakończy swojej pracy.

Zestawy systemowe są uporządkowane według identyfikatora zestawu wierszy, dlatego może się zdarzyć, że moduł Tuple Mover przeskanował wiele istniejących zestawów wierszy, na których nie ma żadnej akcji do wykonania, ale nadal będzie trzymał blokadę SCH-S i dotrze do wpisu w zestawach systemowych, dla których nie może uzyskać blokady poziomu wiersza S, ponieważ jest obecnie zmieniany przez długotrwałą transakcję, która utrzymuje blokadę X w wierszu. W tym momencie biblioteki DDL obejmujące zmianę identyfikatora zestawu wierszy są blokowane za blokadami SCH-S krotki Movera.

Stan

Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.

Źródła informacji

Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.