Kada primenite ovu ispravku, morate da dodate zastavicu za praćenje -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 je slična sledećoj u evidenciji grešaka sistema SQL Server:
Neuspele dodele stranica: FAIL_PAGE_ALLOCATION 513
Upitima je potrebno mnogo vremena da završe izvršavanje i naiđu na SOS_MEMORY_TOPLEVELBLOCKALLOCATOR čekanja. Kada ispitate sledeće informativne tačke, otkrićete da postoji veoma nizak raspoloživi prostor za virtuelnu adresu:
-
DBCC MEMORYSTATUS - odeljak "Proces/broj sistema" - dostupna virtuelna memorija
-
DMV: sys.dm_os_process_memory - kolona virtual_address_space_available_kb
Ove vrednosti počinju oko 8 terabajta (TB) na x64 procesu i nastavljaju da se spuštaju i dostižu nekoliko gigabajta (GB). Kada se nalazite u fazi kada je raspoloživi prostor virtuelne adrese veoma nizak, upiti koji pokušavaju da izvrše dodelu memorije takođe mogu naići na tip čekanja CMEMTHREAD. 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 - kolona virtual_address_space_reserved_kb
-
DBCC MEMORYSTATUS - Memory Manager section - VM Reserved
Ove vrednosti će se obično povećavati u više vrednosti "max server memorije" do skoro 8 TB.
Uzrok
Kada je SQL Server proces dostigao stanje u kojem je ukupna memorija servera = Memorija ciljnog servera = max memorija servera, postoje smernice u upravljaču memorije sistema SQL Server da bi se dozvolilo da nove dodele zahtevaju više od 8 KB stranica da bi privremeno uspele. Ponovljeni obrazac dodele pod takvim uslovom može dovesti do fragmentacije memorijskih blokova i potrošnje prostora virtuelne adrese. Ako se ovaj proces ponovi više puta, prostor virtuelne adrese sistema SQL Server biće iscrpljen i primetićete ranije pomenute simptome.
Rešenje
Kumulativne informacije o ažuriranju
Problem je prvi put otklonjen u sledećoj kumulativnoj ispravki sistema SQL Server.
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodnu kumulativnu ispravku. Preporučujemo da preuzmete i instalirate najnovije kumulativne ispravke za SQL Server:
Ova hitna ispravka sprečava i gubitak memorije i stalno smanjenje raspoloživog prostora virtuelne adrese do kojeg može doći.
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 prostor virtuelne adrese poraste čak 128 TB. Zbog toga možda nećete primetiti ovaj problem u Windows 2012 R2 okruženjima. Više informacija potražite u sledećoj temi u Windows Dev Centru: ograničenjamemorije za izdanja operativnog sistema Windows i Windows servera
-
Ako vidite kontinuirani rast u prostoru virtuelne adrese čak i nakon primene ispravke, možete da utvrdite koji upiti ili operacije zahtevaju velike delove memorije pomoću Page_allocated proširenog događaja. Probna skripta izgleda ovako:
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
To su obično rezervne kopije evidencije i operacije održavanja indeksa koje se često javljaju.