Firma Microsoft rozpowszechnia poprawki programu Microsoft SQL Server 2008 R2 z dodatkiem Service Pack 1 (SP1) lub Microsoft SQL Server 2012 w jednym pliku do pobrania. Ponieważ poprawki są kumulatywne, każda nowa wersja zawiera wszystkie poprawki i wszystkie aktualizacje zabezpieczeń, które zostały dołączone do 2008 wcześniejszego wydania aktualizacji z dodatkiem Service Pack 1 (SP1) lub Microsoft SQL Server 2012.
Symptomy
Rozpatrzmy następujący scenariusz:
-
Na komputerze jest zainstalowane wystąpienie programu Microsoft SQL Server 2008 R2 lub Microsoft SQL Server 2012.
-
W wystąpieniu są wykonywane jednoczesne instrukcje podobne do następujących:
CREATE PROC p AS RETURN (
query
); EXEC p;
Możesz też uruchomić zapytanie zawierające następujący kod:
IF EXISTS(
subquery
);
-
Użycie procesora jest stale wysokie, a wątki pracy są w stanie runnable.
-
Rywalizacja o QUERY_EXEC_STATS SpinLock jest wysoka. Na przykład liczba obrotów, możliwe kolizje oraz wartości odwracania dla QUERY_EXEC_STATS spinlock szybko.Uwaga Aby uzyskać więcej informacji na temat monitorowania QUERY_EXEC_STATS spinlock, zobacz sekcję "więcej informacji".
W tym scenariuszu może wystąpić niska wydajność.
Przyczyna
Ten problem występuje, ponieważ program SQL Server 2008 R2 lub SQL Server 2012 tworzy i niszczy niektóre struktury pamięci na temat globalnych statystyk zamiast ich buforowania. Spowoduje to wąskie gardło wydajności.
Rozwiązanie
Informacje o aktualizacji zbiorczej
Program SQL Server 2012
Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 1 dla programu SQL Server 2012. Aby uzyskać więcej informacji na temat tego zbiorczego pakietu aktualizacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2679368 Pakiet aktualizacji zbiorczej 1 dla programu SQL Server 2012Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2012. Firma Microsoft zaleca zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. 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:
2692828 Kompilacje programu SQL Server 2012 wydane po wydaniu programu SQL Server 2012 Musisz zastosować poprawkę SQL Server 2012 do instalacji programu SQL Server 2012.
Pakiet aktualizacji zbiorczej 5 dla programu SQL Server 2008 R2 z dodatkiem SP1
Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 5. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2008 R2 z dodatkiem SP1, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2659694 Pakiet aktualizacji zbiorczej 5 dla programu SQL Server 2008 R2 z dodatkiem SP1Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2008 R2 SP1. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. 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:
2567616 Kompilacje programu SQL Server 2008 R2 wydane po opublikowaniu programu SQL Server 2008 R2 SP1
Więcej informacji
Aby monitorować QUERY_EXEC_STATS spinlock, Dostosuj opóźnienie i liczbę iteracji stosownie do środowiska w poniższym kodzie, a następnie uruchom go:
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
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".