Simptome
Luați în considerare următorul scenariu:
-
Inserați mai multe rânduri într-un tabel în Microsoft SQL Server 2008 sau în SQL Server 2008 R2 utilizând una dintre următoarele interogări:
-
INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
-
SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
Note
-
Substituentul <target_table> reprezintă numele real al tabelului țintă.
-
Substituentul <predicatorul> reprezintă Predicatul real.
-
Substituentul <source_table> reprezintă tabelul sursă real.
-
-
Pragul de escaladare a tabelului este depășit.
În acest scenariu, motorul de baze de date nu escaladează lacătele tabelului.
Cauză
Această problemă apare deoarece SQL Server nu contorizează intern toate încuietorile noi generate de operațiunile de inserare. Prin urmare, este posibil ca pragul de escaladare a încuietorii să nu fie declanșat atunci când este necesar.
Rezolvare
Informații despre pachetul de servicii pentru SQL Server 2008
Pentru a rezolva această problemă, obțineți cel mai recent pachet Service Pack pentru SQL Server 2008. pentru mai multe informații, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
968382 Cum se obține cel mai recent pachet Service Pack pentru SQL Server 2008
Informații despre pachetul de servicii pentru SQL Server 2008 R2
Pentru a rezolva această problemă, obțineți cel mai recent pachet Service Pack pentru SQL Server 2008 R2. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2527041Cum se obține cel mai recent pachet Service Pack pentru SQL Server 2008 R2
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.Această problemă a fost corectată pentru prima dată în SQL Server 2008 Service Pack 2 pentru SQL Server 2008. această problemă a fost corectată prima dată în SQL Server 2008 R2 Service Pack 1 pentru SQL Server 2008 R2.
Mai multe informații
Pentru mai multe informații despre escaladarea blocare, vizitați următorul site Web Microsoft TechNet:
Informații generale despre escaladarea blocajelorPentru a determina dacă încuietorile unui tabel sunt escaladate, derulează următoarele instrucțiuni 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
Dacă încuietorile tabelului sunt escaladate, Ultima instrucțiune SELECT returnează o valoare de 1 sau 2. Dacă încuietorile tabelului nu sunt escaladate, Ultima instrucțiune SELECT returnează o valoare de 40.066 sau 40.067.