KB3074434 – POPRAVKA: Greška bez memorije kada virtuelni adresni prostor procesa SQL Server ima malo dostupne memorije

Primenjuje se na
SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard

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:

    Ograničenja memorije za Windows i Windows Server izdanja

  • 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)
    GO
    
    
    

    Obično su to rezervne kopije evidencije i operacije održavanja indeksa koje se često dešavaju.