KB3074434 – RETTELSE: Fejl med manglende hukommelse, når det virtuelle adresseområde for den SQL Server proces er meget lidt tilgængelig hukommelse

Gælder for
SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard

Når du har anvendt denne opdatering, skal du tilføje sporingsflaget -T8075 som startparameter for at aktivere denne ændring.

Symptomer

Når du kører en forespørgsel i en 64-bit version af Microsoft SQL Server 2012, modtager du en fejlmeddelelse om manglende hukommelse, der minder om følgende i SQL Server-fejlloggen:

Bemærk

Mislykkede tildeling af sider: FAIL_PAGE_ALLOCATION 513

Det tager lang tid for forespørgsler at afslutte udførelsen og støder på SOS_MEMORY_TOPLEVELBLOCKALLOCATOR ventetider.

Når du undersøger følgende informationspunkter, vil du se, at der er meget lidt tilgængelig virtuel adresseplads:

  • DBCC MEMORYSTATUS – afsnittet Proces-/systemtællinger – tilgængelig virtuel hukommelse
  • DMV: sys.dm_os_process_memory - kolonne virtual_address_space_available_kb

Disse værdier starter omkring 8 terabyte (TB) på en x64-proces og fortsætter med at stige og nå et par gigabyte (GB). 

Når du er på det stadie, hvor den tilgængelige virtuelle adresseplads er meget lav, kan forespørgsler, der forsøger at udføre hukommelsesallokering, også støde på en ventetype af CMEMTHREAD.

Følgende datapunkter fortsætter med at stige over tid:

  • DMV: sys.dm_os_process_memory og sys.dm_os_memory_nodes – kolonne virtual_address_space_reserved_kb
  • DBCC MEMORYSTATUS – afsnittet Hukommelsesstyring – reserveret VM

Disse værdier øges typisk i multipla af værdien "maks. serverhukommelse" op til næsten 8 TB.

Årsag

Når SQL Server-processen har nået den tilstand, hvor Samlet serverhukommelse = Destinationsserverhukommelse = maks. serverhukommelse, er der politikker i SQL Server Hukommelsesstyring, der lader nye allokeringer anmode om flere 8 KB-sider for at lykkes midlertidigt. Et gentaget allokeringsmønster under sådanne betingelser kan medføre fragmentering af hukommelsesblokkene og forbrug af virtuel adresseplads. Hvis denne proces gentages mange gange, er det virtuelle adresseområde i SQL Server opbrugt, og du vil bemærke de symptomer, der blev nævnt tidligere.

Løsning

Oplysninger om kumulativ opdatering

Problemet blev først løst i følgende kumulative opdatering af SQL Server.

Anbefaling: Installér den seneste kumulative opdatering til SQL Server

Hver ny kumulativ opdatering til SQL Server indeholder alle de hotfixes og alle de sikkerhedsrettelser, der fulgte med den forrige kumulative opdatering. Vi anbefaler, at du downloader og installerer de seneste kumulative opdateringer til SQL Server:

Dette hotfix forhindrer både at der mangler hukommelse og den kontinuerlige reduktion af tilgængelig virtuel adresseplads, du kan opleve.

Status

Microsoft har bekræftet, at dette er et problem i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Flere oplysninger

  • Windows 2012 R2 giver mulighed for, at virtuel adresseplads kan vokse op til 128 TB. Derfor bemærker du muligvis ikke dette problem i Windows 2012 R2-miljøer. Du kan finde flere oplysninger i følgende emne i Windows Udviklingscenter:

    Hukommelsesgrænser for versioner af Windows og Windows Server

  • Hvis du ser en uafbrudt vækst i virtuel adresseplads, selv når du har installeret rettelsen, kan du bestemme, hvilke forespørgsler eller handlinger der anmoder om store dele hukommelse ved hjælp af den Page_allocated udvidede hændelse. Et eksempel på et script ser sådan ud:

    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
    
    
    

    Disse er typisk sikkerhedskopiering af logfiler og vedligeholdelse af indeks, som forekommer ofte.