Kada primenite ovu ispravku, morate da dodate zastavicu praćenja -T8075 kao parametar pokretanja da biste omogućili ovu promenu.
Simptomi
Kada pokrenete upit u 64-bitnoj verziji sistema Microsoft SQL Server 2012, dobijate poruku o grešci bez memorije koja podseća na sledeću u evidenciji grešaka za SQL Server:
Napomena
Dodela stranica nije uspela: FAIL_PAGE_ALLOCATION 513
Upitima je potrebno mnogo vremena da se završe izvršavanje i nailazite na SOS_MEMORY_TOPLEVELBLOCKALLOCATOR čekanja.
Kada pregledate sledeće informativne tačke, videćete da je dostupan virtuelni adresni prostor vrlo malo:
- DBCC MEMORYSTATUS - Odeljak "Prebrojavanja procesa/sistema" – Dostupna virtuelna memorija
- DMV: sys.dm_os_process_memory – kolona virtual_address_space_available_kb
Te vrednosti počinju od oko 8 terabajta (TB) u x64 procesu i nastavljaju da se spuštaju i dostižu nekoliko gigabajta (GB).
Kada ste u fazi kada je dostupan virtuelni adresni prostor veoma nizak, upiti koji pokušavaju da izvrše dodelu memorije takođe mogu naići na CMEMTHREAD tip čekanja.
Sledeće tačke podataka će nastaviti da se povećavaju tokom vremena:
- DMV: sys.dm_os_process_memory i sys.dm_os_memory_nodes – virtual_address_space_reserved_kb kolona
- DBCC MEMORYSTATUS - Odeljak Memori Manager - VM rezervisan
Te vrednosti se obično povećavaju u umnožcima vrednosti "maksimalna memorija servera" do skoro 8 TB.
Uzrok
Kada proces SQL Server dostigne stanje u kojem je ukupna memorija servera = memorija ciljnog servera = maksimalna memorija servera, postoje smernice u menadžeru memorije SQL Server-a koje omogućavaju da nove alokacije zahtevaju više stranica od 8 KB da bi privremeno uspele. Ponovljeni obrazac dodele pod takvim uslovima može da izazove fragmentaciju memorijskih blokova i potrošnju virtuelnog adresnog prostora. Ako se ovaj proces ponavlja više puta, SQL Server virtuelni adresni prostor će biti iscrpljen i primetićete simptome koji su ranije pomenuti.
Rešenje
Informacije o kumulativnom ažuriranju
Problem je prvi put rešen u sledećoj kumulativnoj ispravci sistema SQL Server.
Preporuka: Instalirajte najnoviju kumulativnu ispravku za SQL Server
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Preporučujemo da preuzmete i instalirate najnovije kumulativne ispravke za SQL Server:
Ova hitna ispravka sprečava da dođe do nedostatka memorije i stalnog smanjivanja dostupnog virtuelnog adresnog prostora.
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.
Više informacija
Windows 2012 R2 omogućava da virtuelni adresni prostor naraste i do 128 TB. Stoga možda nećete primetiti ovaj problem u Windows 2012 R2 okruženjima. Dodatne informacije potražite u sledećoj temi u Windows centru za projektante:
Ako primetite kontinuirani rast virtuelnog adresnog prostora čak i nakon primene ispravke, pomoću Page_allocated proširenog događaja možete da odredite koji upiti ili operacije zahtevaju velike delove memorije. Uzorak skripte izgleda ovako:
CREATE EVENT SESSION [memory_tracking] ON SERVER ADD 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) GOObično su to rezervne kopije evidencije i operacije održavanja indeksa koje se često dešavaju.