Microsoft izplata Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) vai Microsoft SQL Server 2012 labojumi vienā lejupielādējamā failā. Tā kā labojumi ir kumulatīvi, katrā jaunajā laidienā ir iekļauti visi labojumfaili un visi drošības atjauninājumi, kas iekļauti iepriekšējā SQL Server 2008 R2 1. servisa pakotnē (SP1) vai Microsoft SQL Server 2012 atjaunināšanas laidienā.
Simptomi
Iedomājieties šādu scenāriju:
-
Datorā ir instalēta Microsoft SQL Server 2008 R2 vai Microsoft SQL Server 2012 instance.
-
Vienlaicīgas atskaites, kas līdzinās tālāk norādītajām, tiek izpildītas instancē:
CREATE PROC p AS RETURN (
query
); EXEC p;
Vai palaižat vaicājumu, kurā ir šāds kods:
IF EXISTS(
subquery
);
-
Centrālā procesora lietojums ir ļoti augsts, un darba pavedieni ir runnable stāvoklī.
-
QUERY_EXEC_STATS spinlock saturs ir augsts. Piemēram, spin skaits, iespējamās sadursmes un QUERY_EXEC_STATSas spinlockās vērtības.Piezīme. Papildinformāciju par to, kā pārraudzīt QUERY_EXEC_STATS spinlock, skatiet sadaļā "Papildinformācija".
Šajā scenārijā var rasties lēna veiktspēja.
Cēlonis
Šī problēma rodas tāpēc, ka SQL Server 2008 R2 vai SQL Server 2012 izveido un iznīcina dažas atmiņas struktūras par globālo statistiku, nevis to kešdarbi. Tas rada veiktspējas problēmas.
Risinājums
Kumulatīvās atjaunināšanas informācija
SQL Server 2012
Šīs problēmas labojums pirmo reizi tika izlaists SQL Server 2012 kumulatīvajā atjauninājumā 1. Lai iegūtu papildinformāciju par šo kumulatīvās atjaunināšanas pakotni, noklikšķiniet uz šī raksta numura, lai skatītu Microsoft zināšanu bāzes rakstu:
2679368 Kumulatīvās atjaunināšanas pakotne 1 SQL Server 2012Piezīme. Tā kā būvējums ir kumulatīvs, katrā jaunajā laidienā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā SQL Server 2012 labošanas laidienā. Microsoft iesaka, ka apsveriet iespēju lietot jaunāko labojumu laidienu, kurā ir iekļauts šis labojumfails. Lai iegūtu papildinformāciju, noklikšķiniet uz šī raksta numura, lai skatītu Microsoft zināšanu bāzes rakstu:
2692828 SQL Server 2012 būvējumi, kas tika izlaisti pēc tam, kad tika izlaists SQL Server 2012 SQL Server 2012 labojumfails ir jālieto SQL Server 2012.
Kumulatīvās atjaunināšanas pakotne 5 SQL Server 2008 R2 SP1
Šīs problēmas labojums pirmo reizi tika izlaists kumulatīvajā atjaunināšanā 5. Lai iegūtu papildinformāciju par to, kā iegūt SQL Server 2008 R2 SP1 kumulatīvās atjaunināšanas pakotni, noklikšķiniet uz šī raksta numura, lai skatītu Microsoft zināšanu bāzes rakstu:
2659694 Kumulatīvās atjaunināšanas pakotne 5 SQL Server 2008 R2 SP1Piezīme. Tā kā būvējums ir kumulatīvs, katrā jaunajā laidienā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā SQL Server 2008 R2 SP1 labošanas laidienā. Iesakām apsvērt jaunāko labojumu laidienu, kurā ir iekļauts šis labojumfails. Lai iegūtu papildinformāciju, noklikšķiniet uz šī raksta numura, lai skatītu Microsoft zināšanu bāzes rakstu:
2567616 SQL Server 2008 R2 būvējumi, kas tika izlaisti pēc tam, kad tika izlaists SQL Server 2008 R2 SP1
Papildinformācija
Lai pārraudzītu QUERY_EXEC_STATS spinlock, noregulējiet atlikšanu un atkārtojumu skaitu atbilstoši savai videi tālāk norādītā koda vietā un pēc tam izpildiet to:
SET NOCOUNT ONCREATE TABLE #spins([Spinlock Name] varchar(50),Collisions numeric,Spins numeric,[Spins/Collision] float,[Sleep Time (ms)] numeric,Backoffs numeric, InsertTime datetime DEFAULT GETDATE())DECLARE @counter int = 1WHILE @counter < 10 BEGIN INSERT INTO #spins ([Spinlock Name], Collisions, Spins, [Spins/Collision], [Sleep Time (ms)], Backoffs) EXECUTE ('DBCC SQLPERF (''SPINLOCKSTATS'') WITH NO_INFOMSGS') WAITFOR DELAY '00:00:05' SET @counter +=1 ENDSELECT * FROM #spins WHERE [Spinlock Name] = 'QUERY_EXEC_STATS' ORDER BY InsertTimeDROP TABLE #spins
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".