Společnost Microsoft distribuuje aktualizace Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) nebo Microsoft SQL Server 2012 v jednom souboru ke stažení. Protože jsou opravy kumulativní, každá nová verze obsahuje všechny opravy hotfix a všechny aktualizace zabezpečení, které byly součástí předchozí verze systému SQL Server 2008 R2 Service Pack 1 (SP1) nebo aktualizace Microsoft SQL Server 2012 Update.
Příznaky
Zvažte následující scénář:
-
Do počítače nainstalujete instanci Microsoft SQL serveru 2008 R2 nebo Microsoft SQL Server 2012.
-
V instanci jsou spouštěny souběžné příkazy podobné následujícím:
CREATE PROC p AS RETURN (
query
); EXEC p;
Nebo spustíte dotaz, který obsahuje následující kód:
IF EXISTS(
subquery
);
-
Využití procesoru je konzistentně vysoké a pracovní vlákna jsou ve stavu runnable.
-
Obsah pro QUERY_EXEC_STATS spinlock je vysoký. Například počet, možná kolize a hodnoty pro odhlášení QUERY_EXEC_STATS spinlock se rychle zvýší.Poznámka Další informace o tom, jak sledovat QUERY_EXEC_STATS SpinLock, najdete v části Další informace.
V tomto scénáři může dojít ke snížení výkonu.
Příčina
K tomuto problému dochází proto, že když SQL Server 2008 R2 nebo SQL Server 2012 vytvoří a zničí některé struktury paměti, místo které je do mezipaměti ukládat. To má za následek kritické snížení výkonu.
Řešení
Informace o kumulativní aktualizaci
SQL Server 2012
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 1 pro SQL Server 2012. Další informace o tomto kumulativním balíčku aktualizací najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2679368 Kumulativní aktualizace 1 pro SQL Server 2012Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Společnost Microsoft doporučuje zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2692828 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012 Na instalaci SQL serveru 2012 musíte použít opravu hotfix systému SQL Server 2012.
Kumulativní aktualizace 5 pro SQL Server 2008 R2 SP1
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 5. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2008 R2 SP1, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2659694 Kumulativní aktualizace 5 pro SQL Server 2008 R2 SP1Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze systému SQL Server 2008 R2 s aktualizací SP1. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2567616 Buildy SQL Server 2008 R2 vydaná po vydání SQL serveru 2008 R2 SP1
Další informace
Chcete-li sledovat QUERY_EXEC_STATS SpinLock, upravte zpoždění a počet iterací podle potřeby v tomto prostředí v následujícím kódu a spusťte ho:
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
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.