KB3074434 - FIX: mälutõrge, kui SQL Server protsessi virtuaalne aadressiruum on väga väike saadaolev mälu

Rakenduskoht
SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard

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.

    Windowsi ja Windows Server väljaannete mälupiirangud

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

    Tavaliselt on need logi varukoopiad ja registri hooldustoimingud, mis toimuvad sageli.