KB2448971 — Poprawka: blokady tabeli nie są eskalacjne po wstawieniu wielu wierszy do tabeli w programie SQL Server 2008 lub SQL Server 2008 R2

Dotyczy: SQL Server 2008 Service Pack 4SQL 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:
2527041 Jak 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:Aby 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.