Po instalaci této aktualizace bude nutné přidat příznak trasování-T8075 jako parametr Startup (spuštění) a tuto změnu povolit.
Příznaky
Když spustíte dotaz v 64 verzi Microsoft SQL serveru 2012, zobrazí se v protokolu chyb SQL serveru chybová zpráva o nedostatku paměti, která se podobá následujícímu:
Nezdařilo se přidělit stránky: FAIL_PAGE_ALLOCATION 513
Dokončení dotazů trvá příliš dlouho a může se SOS_MEMORY_TOPLEVELBLOCKALLOCATOR čekat. Když prozkoumáte tyto informační body, zjistíte, že je k dispozici velmi malý dostupný virtuální adresní prostor:
-
DBCC MEMORYSTATUS-oddíl Process/System počty – dostupná virtuální paměť
-
DMV: virtual_address_space_available_kb sloupce sys.dm_os_process_memory
Tyto hodnoty se v procesu x64 pohybují kolem 8 terabajtů (TB) a můžete se dále rozepsat a dosahovat pár gigabajtů (GB). Když se nacházíte ve fázi, kde je k dispozici virtuální adresní prostor je velmi nízký, mohou se dotazy, které se pokusí o přidělení paměti, objevit také v CMEMTHREAD typu. Následující datové body se budou dál postupně zvyšovat:
-
DMV: sys.dm_os_process_memory a sys.dm_os_memory_nodes virtual_address_space_reserved_kb
-
DBCC MEMORYSTATUS – část správce paměti – rezervuje virtuální počítač
Tyto hodnoty se obvykle zvyšují v násobcích hodnoty "maximální využití paměti serveru" do téměř 8 TB.
Příčina
Když proces SQL serveru dosáhl stavu, ve kterém celková paměť serveru = maximální paměť serveru, existují ve Správci paměti SQL serveru zásady, které umožňují, aby nové přidělení bylo úspěšné. Opakovaný vzorek přidělení v takovém stavu může způsobit fragmentaci bloků paměti a spotřebu virtuálního adresového prostoru. Pokud se tento proces mnohokrát opakuje, vyčerpá se virtuální adresní prostor SQL serveru a zjistíte, které uvedené kroky byly zmíněny dříve.
Řešení
Informace o kumulativní aktualizaci
Tento problém byl poprvé opraven následující kumulativní aktualizací SQL serveru.
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. Doporučujeme stáhnout a nainstalovat nejnovější kumulativní aktualizace pro SQL Server:
Tato oprava hotfix brání v nedostatku paměti a nepřetržitému omezení dostupného virtuálního adresního prostoru.
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.
Další informace
-
Systém Windows 2012 R2 umožňuje virtuální adresový prostor rozšiřovat jako velké 128 TB. Proto si nemůžete všimnout tohoto problému v prostředích Windows 2012 R2. Další informace najdete v následujícím tématu v centru pro vývojáře Windows:limity paměti pro systémy Windows a Windows Server .
-
Pokud se ve virtuálním adresním prostoru zobrazuje nepřetržitý růst, a to i po použití opravy, můžete určit, které dotazy nebo operace vyžadují velké bloky paměti, pomocí Page_allocated rozšířené události. Ukázkový skript vypadá takto:
CREATE EVENT SESSION [memory_tracking] ON SERVERADD EVENT sqlos.page_allocated( ACTION(package0.callstack,sqlos.cpu_id,sqlos.task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.query_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text) WHERE ([number_pages]>(1)))ADD TARGET package0.event_file(SET filename=N'E:\Data\MSSQL11.MSSQLSERVER\MSSQL\Log\memory_tracking.xel')WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_CPU,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)GO
Obvykle se jedná o operace údržby protokolu a indexování indexu, ke kterým dochází často.