Příznaky
Pokud používáte novou instanci Microsoft SQL Server 2016 (nebo 2017) nebo instanci SQL Server 2016 (nebo 2017), která je upgradovaná ze starší verze SQL Server, dochází k problémům s výkonem kvůli vysokému využití procesoru. Pokud se dotazujete na tabulku sys.dm_os_spinlock_stats , všimnete si také vysoké hodnoty ve sloupci spins pro řádky SECURITY_CACHE (Mezipaměť zabezpečení) a CMED_HASH_SET (Mezipaměť metadat) (ve srovnání s ostatními řádky v tabulce). Můžete si například všimnout následujících hodnot.
Příčina
K tomuto problému dochází z důvodu vysoké kolize spin lock ve vysoce souběžném systému. V těchto operačních systémech soupeří více vláken procesoru o prostředky a po delší dobu se otáčejí, zatímco se pravidelně spouštějí ve smyčce, aby se zjistilo, jestli je prostředek k dispozici, a ne okamžitě. Pokud se u prostředku místo získávání stále otáčí více vláken procesoru (ve smyčce while ), způsobuje to vysoké využití procesoru a problémy s výkonem.
Řešení
Tento problém byl opraven v následujících kumulativních aktualizacích pro SQL Server:
Poznámka Po použití kumulativní aktualizace 2 (CU2) SQL Server 2016 se názvy SECURITY_CACHE a CMED_HASH_SET změní na LOCK_RW_SECURITY_CACHE a LOCK_RW_CMED_HASH_SET. Po použití CU2 se hodnoty zobrazí takto.
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace pro SQL Server:
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.
Odkazy
Přečtěte si o terminologii , kterou Microsoft používá k popisu aktualizací softwaru.
Dokument white paper Diagnosing and Resolving Spinlock Contention on SQL Server discusses issues and resolutions that are related to spinlock kolize in detail.