Príznaky
Zoberme si nasledujúcu situáciu:
-
Vložíte veľa riadkov do tabuľky v Microsoft SQL Server 2008 alebo SQL Server 2008 R2 pomocou niektorého z nasledujúcich dotazov:
-
INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
-
SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
Poznámky
-
Zástupný symbol <target_table> predstavuje názov skutočnej cieľovej tabuľky.
-
<predikát> zástupný symbol predstavuje skutočný predikát.
-
Zástupný symbol <source_table> predstavuje skutočnú zdrojovú tabuľku.
-
-
Prekročí sa prahová hodnota vystupňovania uzamknutia tabuľky.
V tomto scenári databázový stroj nie je eskalovať zámky v tabuľke.
Príčina
Tento problém sa vyskytuje, pretože SQL Server nie je interne spočíta všetky nové zámky generované VLOŽENÍM operácie. Preto sa môže stať, že prahová hodnota v zámku sa v prípade potreby nespustí.
Riešenie
Informácie o balíku Service Pack pre SQL Server 2008
Ak chcete tento problém vyriešiť, Získajte najnovší balík Service Pack pre SQL Server 2008. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na nasledovné číslo článku:
968382 Získanie najnovšieho balíka Service Pack pre SQL Server 2008
Informácie o balíku Service Pack pre SQL Server 2008 R2
Ak chcete tento problém vyriešiť, Získajte najnovší balík Service Pack pre SQL Server 2008 R2. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na nasledovné číslo článku:
2527041Získanie najnovšieho balíka Service Pack pre SQL Server 2008 R2
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.Tento problém bol opravený v SQL Server 2008 Service Pack 2 pre SQL Server 2008. Tento problém bol opravený v SQL Server 2008 R2 Service Pack 1 pre SQL Server 2008 R2.
Ďalšie informácie
Ďalšie informácie o eskalácii uzamknutia nájdete na nasledujúcej webovej lokalite Microsoft TechNet:
Všeobecné informácie o eskalácii uzamknutiaAk chcete zistiť, či sú zámky tabuľky eskalovať, spustite nasledujúce príkazy 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
Ak sú zámky v tabuľke eskalovať, príkaz posledný príkaz vráti hodnotu 1 alebo 2. Ak sa zámky v tabuľke nezvyšujú, príkaz posledný príkaz vráti hodnotu buď 40 066 alebo 40 067.