Pärast selle värskenduse rakendamist peate selle muudatuse lubamiseks lisama jälituslipu -T8075 käivitusparameetrina.
Sümptomid
Kui käivitate päringu Microsoft SQL Server 2012 64-bitises versioonis, kuvatakse mälu otsasaamise tõrketeade, mis sarnaneb SQL Server tõrkelogis järgmisega:
Märkus.
Lehtede eraldamine nurjus: FAIL_PAGE_ALLOCATION 513
Päringute täitmine võtab kaua aega ja SOS_MEMORY_TOPLEVELBLOCKALLOCATOR ooteajad ilmnevad.
Kui uurite järgmisi teabepunkte, leiate, et virtuaalne aadressiruum on väga väike:
- DBCC MEMORYSTATUS – jaotis Protsessi/süsteemi arvud – saadaolev virtuaalmälu
- DMV: sys.dm_os_process_memory – veeru virtual_address_space_available_kb
Need väärtused algavad x64-protsessis umbes 8 terabaidist (TB), jätkavad alla ronimist ja ulatuvad mõne gigabaidini (GB).
Kui olete etapis, kus saadaolev virtuaalaadressiruum on väga väike, võivad mälueraldamist proovivad päringud kohata ka ootetüüpi CMEMTHREAD.
Aja jooksul suurenevad jätkuvalt järgmised andmepunktid:
- DMV: sys.dm_os_process_memory ja sys.dm_os_memory_nodes – veeru virtual_address_space_reserved_kb
- DBCC MEMORYSTATUS – mäluhalduri jaotis – VM reserveeritud
Need väärtused suurendavad tavaliselt serveri maksimummälu väärtuse kordseid kuni peaaegu 8 TB-le.
Põhjus
Kui SQL Server protsess on jõudnud olekusse, kus serveri kogumälu = sihtserveri mälu = max serverimälu, on SQL Server mäluhalduris poliitikaid, et lubada uutel jaotustel ajutiselt õnnestuda mitu 8 kB lehte. Sellise tingimuse korral võib korduv jaotusskeem põhjustada mäluplokkide fragmentimist ja virtuaalse aadressiruumi tarbimist. Kui see protsess kordub mitu korda, siis SQL Server virtuaalne aadressiruum ammendub ja te märkate varem mainitud sümptomeid.
Lahendus
Koondvärskenduse teave
Probleem lahendati esmalt järgmises SQL Server koondvärskenduses.
Soovitus: installige SQL Server uusim koondvärskendus
Iga uus koondvärskendus SQL Server sisaldab kõiki kiirparandusi ja kõiki turbeparandusi, mis olid kaasatud eelmise koondvärskenduse. Soovitame teil alla laadida ja installida SQL Server uusimad koondvärskendused.
See käigultparandus takistab nii mälu otsast kui ka saadaoleva virtuaalse aadressiruumi pidevat vähenemist.
Olek
Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.
Veel teavet
Windows 2012 R2 võimaldab virtuaalse aadressiruumi kasvada nii suureks kui 128 TB. Seetõttu ei pruugi te seda probleemi Windows 2012 R2 keskkondades märgata. Lisateavet leiate Windowsi arenduskeskuses järgmisest teemast.
Kui näete virtuaalse aadressiruumi pidevat kasvu ka pärast paranduse rakendamist, saate Page_allocated laiendatud sündmuse abil kindlaks teha, millised päringud või toimingud taotlevad suurt mälumahtu. Näidisskript näeb välja selline:
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) GOTavaliselt on need logi varukoopiad ja registri hooldustoimingud, mis toimuvad sageli.