Kada primijenite ovo ažuriranje, morate dodati zastavicu Trace-T8075 kao parametar pokretanja da biste omogućili tu promjenu.
Simptomi
Kada pokrenete upit u 64-bitnim verzijama sustava Microsoft SQL Server 2012, prikazat će vam se poruka o pogrešci koja se prikazuje izvan memorije koja nalikuje sljedećoj u zapisniku pogreške sustava SQL Server:
Neuspješno alociranje stranica: FAIL_PAGE_ALLOCATION 513
Upite traje dugo vremena da biste dovršili izvršenje i susret SOS_MEMORY_TOPLEVELBLOCKALLOCATOR čekanje. Kada pregledate sljedeće informacije, vidjet ćete da postoji vrlo nizak raspoloživi virtualni adresni razmak:
-
DBCC MEMORYSTATUS-odjel procesnih/sistemskih točaka – dostupna virtualna memorija
-
DMV: sys.dm_os_process_memory-stupac virtual_address_space_available_kb
Te vrijednosti počinju s oko 8 terabajta (TB) na procesoru x64 i nastavljaju se spustiti i dosegnuti nekoliko gigabajta (GB). Kada ste na pozornici gdje je dostupan virtualni adresni prostor vrlo nizak, upiti koji pokušaju izvršiti alokaciju memorije mogu naići i na vrstu čekanja CMEMTHREAD. Sljedeće će se stavke podataka nastaviti povećavati tijekom vremena:
-
DMV: sys.dm_os_process_memory i sys.dm_os_memory_nodes-stupac virtual_address_space_reserved_kb
-
DBCC MEMORYSTATUS-upravitelj memorije – rezervirano za VM
Te će se vrijednosti obično povećati u višestrukim vrijednostima vrijednosti "Max Server Memory" do gotovo 8 TB.
Uzrok
Kada je postupak sustava SQL Server dosegnuo državu u kojoj se prikazuje ukupna memorija poslužitelja = odredišna memorija = maksimalna memorija poslužitelja, u upravitelju memorije poslužitelja SQL Server postoje pravila o tome da nove alokacije zatraže više od 8 KB stranica da bi privremeno uspjele. Ponavljanje uzorka alokacije u okviru takvog stanja može prouzročiti fragmentaciju memorijskih blokova i konzumacije virtualnog adresnog prostora. Ako se taj postupak ponavlja mnogo puta, bit će iscrpljen virtualni adresni razmak sustava SQL Server i primijetit ćete simptome koji su prethodno navedeni.
Rješenje
Kumulativne informacije o ažuriranju
Problem je prvi put riješen u sljedećem kumulativnom ažuriranju sustava SQL Server.
Svako novo Kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sve sigurnosne ispravke uključene u prethodno Kumulativno ažuriranje. Preporučujemo da preuzmete i instalirate najnovija kumulativna ažuriranja za SQL Server:
Ovim se hitnim popravkom sprječava i izvan memorije i kontinuirano smanjenje dostupnog virtualnog adresnog prostora koji možete doživjeti.
Status
Microsoft je potvrdio da se radi o problemu u Microsoftovim proizvodima navedenim u odjeljku "odnosi se na".
Dodatne informacije
-
Windows 2012 R2 dopušta virtualni adresni razmak da raste kao velik kao 128 TB. Zbog toga ne možete primijetiti taj problem u okruženju sustava Windows 2012 R2. Dodatne informacije potražite u sljedećem članku u centru za korisnike sustava Windows:memorijska ograničenja za izdanja sustava Windows i Windows Server
-
Ako u virtualnom adresnom prostoru vidite stalan rast, čak i kada primijenite popravak, možete utvrditi koji upiti ili operacije zahtijevaju velike komadiće memorije pomoću Page_allocated proširenog događaja. Ogledna 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
Obično su to sigurnosne kopije zapisnika i održavanje indeksa, što se često događa.