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) GODisse er typisk sikkerhedskopiering af logfiler og vedligeholdelse af indeks, som forekommer ofte.