KB3074434 – FIKS: Feilmelding om at det ikke er nok minne når den virtuelle adresseplassen i SQL Server-prosessen har lite tilgjengelig minne

Gjelder 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 installert denne oppdateringen, må du legge til sporingsflagget -T8075 som en oppstartsparameter for å aktivere denne endringen.

Symptomer

Når du kjører en spørring i en 64-biters versjon av Microsoft SQL Server 2012, får du en feilmelding om at det ikke er nok minne omtrent som det følgende i SQL Server-feilloggen:

Obs!

Mislykkede tilordning av sider: FAIL_PAGE_ALLOCATION 513

Det tar lang tid å fullføre utføringen av spørringer, og møter SOS_MEMORY_TOPLEVELBLOCKALLOCATOR ventinger.

Når du undersøker følgende informasjonspunkter, vil du oppdage at det er svært lite tilgjengelig virtuell adresseplass:

  • DBCC MEMORYSTATUS - delen Prosess/Systemantall - Tilgjengelig virtuelt minne
  • DMV: sys.dm_os_process_memory – kolonne virtual_address_space_available_kb

Disse verdiene starter rundt 8 terabyte (TB) i en x64-prosess og fortsetter å klatre ned og nå noen få gigabyte (GB). 

Når du er på et stadium der det er svært lite tilgjengelig plass for virtuelle adresser, kan spørringer som prøver å utføre minnetildeling, også støte på en ventetype av CMEMTHREAD.

Følgende datapunkter vil fortsette å øke over tid:

  • DMV: sys.dm_os_process_memory og sys.dm_os_memory_nodes – kolonne virtual_address_space_reserved_kb
  • DBCC MEMORYSTATUS – Minnebehandling-delen – VM reservert

Disse verdiene øker vanligvis i multipler av verdien for maksimalt serverminne opp til nesten 8 TB.

Årsak

Når SQL Server-prosessen har nådd tilstanden der totalt serverminne = målserverminne = maksimalt serverminne, finnes det policyer i SQL Server minnebehandling som lar nye tildelinger be om flere 8 kB-sider for å lykkes midlertidig. Gjentatt tildelingsmønster under slike forhold kan føre til fragmentering av minneblokkene og forbruk av virtuelt adresseområde. Hvis denne prosessen gjentas mange ganger, vil det virtuelle adresseområdet for SQL Server være oppbrukt, og du vil legge merke til symptomene som ble nevnt tidligere.

Oppløsning

Informasjon om kumulativ oppdatering

Problemet ble først løst i den følgende kumulative oppdateringen av SQL Server.

Anbefaling: Installer den nyeste kumulative oppdateringen for SQL Server

Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og alle sikkerhetsrettinger som fulgte med den forrige kumulative oppdateringen. Vi anbefaler at du laster ned og installerer de nyeste kumulative oppdateringene for SQL Server:

Denne hurtigreparasjonen forhindrer både at du går tom for minne og kontinuerlig reduksjon av tilgjengelig virtuelt adresseområde som kan oppstå.

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen «Gjelder for».

Mer informasjon

  • Windows 2012 R2 tillater at virtuelt adresseområde kan vokse seg så stort som 128 TB. Derfor legger du kanskje ikke merke til dette problemet i Windows 2012 R2-miljøer. Hvis du vil ha mer informasjon, kan du se følgende emne i Windows-utviklingssenteret:

    Minnegrenser for Windows- og Windows Server-versjoner

  • Hvis du ser kontinuerlig vekst i virtuelt adresseområde selv etter at du har brukt løsningen, kan du finne ut hvilke spørringer eller operasjoner som ber om store mengder minne ved hjelp av den Page_allocated utvidede hendelsen. Et eksempelskript ser slik ut:

    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
    
    
    

    Vanligvis er dette sikkerhetskopiering av logg og vedlikeholdsoperasjoner for indekser, som forekommer ofte.