Applies ToSQL Server 2008 Service Pack 4 SQL Server 2008 R2 Service Pack 3

Symptomy

Rozpatrzmy następujący scenariusz:

  • Do tabeli w programie Microsoft SQL Server 2008 lub SQL Server 2008 R2 wstawianych jest wiele wierszy, korzystając z jednego z następujących zapytań:

    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>

    Uwagi

    • Symbol zastępczy <target_table> reprezentuje rzeczywistą nazwę tabeli docelowej.

    • Predykat<> symbol zastępczy reprezentuje rzeczywisty predykat.

    • Symbol zastępczy <source_table> reprezentuje rzeczywistą tabelę źródłową.

  • Próg eskalacji blokady tabeli jest przekroczony.

W tym scenariuszu aparat bazy danych nie dokonuje eskalacji blokad tabeli.

Przyczyna

Ten problem występuje, ponieważ program SQL Server nie zlicza wewnętrznie wszystkich nowych blokad generowanych przez operacje INSERT. Dlatego Próg eskalacji blokady może nie zostać wyzwolony, jeśli jest wymagany.

Rozwiązanie

Informacje o dodatku Service Pack dla programu SQL Server 2008

Aby rozwiązać ten problem, Uzyskaj najnowszy dodatek Service Pack dla programu SQL Server 2008. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

968382 Jak uzyskać najnowszy dodatek Service Pack dla programu SQL Server 2008

Informacje o dodatku Service Pack dla programu SQL Server 2008 R2

Aby rozwiązać ten problem, Uzyskaj najnowszy dodatek Service Pack dla programu SQL Server 2008 R2. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2527041Jak uzyskać najnowszy dodatek Service Pack dla programu SQL Server 2008 R2

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".Ten problem został po raz pierwszy rozwiązany w programie SQL Server 2008 z dodatkiem Service Pack 2 dla programu SQL Server 2008. ten problem rozwiązano po raz pierwszy w programie SQL Server 2008 R2 z dodatkiem Service Pack 1 dla programu SQL Server 2008 R2

Więcej informacji

Aby uzyskać więcej informacji na temat eskalacji blokady, odwiedź następującą witrynę internetową Microsoft TechNet:

Informacje ogólne o eskalacji blokadyAby określić, czy blokady tabeli są eskalacjne, uruchom następujące instrukcje języka Transact-SQL:

USE tempdbGOCREATE TABLE x (i INT NOT NULL PRIMARY KEY)GOBEGIN TRANINSERT xSELECT TOP (40000)ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rFROM master..spt_values a, master..spt_values bORDER BYrSELECTCOUNT(*)FROM sys.dm_tran_locksWHERE request_session_id = @@SPID ROLLBACKGODROP TABLE x 

Jeśli blokady tabeli są eskalacją, ostatnią instrukcję SELECT zwraca wartość 1 lub 2. Jeśli blokady tabeli nie są eskalacjne, Ostatnia instrukcja SELECT zwróci wartość 40 066 lub 40 067.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.