KB2448971-Fix: die Sperren einer Tabelle werden nicht eskaliert, wenn Sie viele Zeilen in eine Tabelle in SQL Server 2008 oder in SQL Server 2008 R2 einfügen

Gilt für: Microsoft SQL Server 2008 Service Pack 4Microsoft SQL Server 2008 R2 Service Pack 3

Problembeschreibung


Stellen Sie sich folgendes Szenario vor:
  • Sie können viele Zeilen in eine Tabelle in Microsoft SQL Server 2008 oder in SQL Server 2008 R2 einfügen, indem Sie eine der folgenden Abfragen verwenden:
    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
    Hinweise
    • Der <target_table> Platzhalter steht für den tatsächlichen Zieltabellennamen.
    • Der <-Prädikat> Platzhalter stellt das eigentliche Prädikat dar.
    • Die <source_table> Platzhalter steht für die eigentliche Quelltabelle.
  • Der Schwellenwert für die Sperrenausweitung der Tabelle wird überschritten.
In diesem Szenario eskaliert Datenbankmodul die Sperren der Tabelle nicht.

Ursache


Dieses Problem tritt auf, weil SQL Server nicht intern alle neuen Sperren zählt, die durch Einfügevorgänge generiert werden. Daher wird der Schwellenwert für die Sperrenausweitung möglicherweise nicht ausgelöst, wenn dies erforderlich ist.

Fehlerbehebung


Service Pack-Informationen für SQL Server 2008

Um dieses Problem zu beheben, besorgen Sie sich das neueste Service Pack für SQL Server 2008. Wenn Sie weitere Informationen benötigen, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
968382 So erhalten Sie das neueste Service Pack für SQL Server 2008

Service Pack-Informationen für SQL Server 2008 R2

Um dieses Problem zu beheben, besorgen Sie sich das neueste Service Pack für SQL Server 2008 R2. Wenn Sie weitere Informationen wünschen, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
2527041 So erhalten Sie das neueste Service Pack für SQL Server 2008 R2

Status


Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.Dieses Problem wurde zuerst in SQL Server 2008 Service Pack 2 für SQL Server 2008 behoben. dieses Problem wurde zuerst in SQL Server 2008 R2 Service Pack 1 für SQL Server 2008 R2 behoben.

Weitere Informationen


Weitere Informationen zur Sperrenausweitung finden Sie auf der folgenden Microsoft TechNet-Website:Wenn Sie ermitteln möchten, ob die Sperren einer Tabelle eskaliert werden, führen Sie die folgenden Transact-SQL-Anweisungen aus:
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 
Wenn die Sperren der Tabelle eskaliert werden, gibt die letzte SELECT-Anweisung den Wert 1 oder 2zurück. Wenn die Sperren der Tabelle nicht eskaliert werden, gibt die letzte SELECT-Anweisung den Wert entweder 40.066 oder 40.067zurück.