A frissítés alkalmazása után hozzá kell adnia a -T8075 nyomkövetési jelzőt indítási paraméterként a módosítás engedélyezéséhez.
Tünetek
Ha lekérdezést futtat a Microsoft SQL Server 2012 64 bites verziójában, az SQL Server hibanaplójában a következőhöz hasonló memóriahiányról tájékoztató hibaüzenet jelenik meg:
Megjegyzés
Lapok kiosztása sikertelen: 513. FAIL_PAGE_ALLOCATION
A lekérdezések végrehajtása sok időbe telik, és várakozások SOS_MEMORY_TOPLEVELBLOCKALLOCATOR történnek.
Az alábbi adatokat megvizsgálva azt láthatja, hogy nagyon kevés a rendelkezésre álló virtuális címterület:
- DBCC MEMORYSTATUS - Folyamatok/rendszerszámok szakasz - Rendelkezésre álló virtuális memória
- DMV: sys.dm_os_process_memory - virtual_address_space_available_kb. oszlop
Ezek az értékek körülbelül 8 terabájt (TB) magasságúak x64-es folyamatok esetén, majd tovább emelkednek, és elérnek néhány gigabájtot (GB).
Ha abban a szakaszban van, amikor a rendelkezésre álló virtuális címterület nagyon alacsony, a memóriafoglalást megkísérlő lekérdezések is várakozási típusú CMEMTHREAD-be ütközhetnek.
Az alábbi adatpontok értéke idővel tovább növekedni fog:
- DMV: sys.dm_os_process_memory és sys.dm_os_memory_nodes - virtual_address_space_reserved_kb. oszlop
- DBCC MEMORYSTATUS – Memóriakezelő szakasz – VM fenntartva
Ezek az értékek általában a "maximális kiszolgálómemória" érték többszörösében, közel 8 TB-ig növekednek.
Ok
Amikor az SQL Server folyamat elérte azt az állapotot, ahol Teljes kiszolgálói memória = Célkiszolgáló memória = maximális kiszolgálómemória, az SQL Server memóriakezelőben olyan házirendek vannak érvényben, amelyek lehetővé teszik, hogy az új foglalások több 8 KB-os lapot kérjenek ideiglenesen sikerességhez. Ilyen körülmények között az ismétlődő foglalási szabály a memóriablokkok töredezettségét és a virtuális címterület használatát okozhatja. Ha ez a folyamat sokszor megismétlődik, az SQL Server virtuális címterülete kimerül, és a korábban említett tüneteket tapasztalni fogja.
Megoldás
Összegző frissítéssel kapcsolatos információk
A hibát először az SQL Server következő összegző frissítésében javítottuk.
Javaslat: Telepítse az SQL Server legújabb összegző frissítését
Az SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és minden biztonsági javítást, amely az előző kumulatív frissítésben szerepelt. Javasoljuk, hogy töltse le és telepítse az SQL Server legújabb összegző frissítéseit:
Ez a gyorsjavítás megakadályozza mind a memóriahiányt, mind pedig a rendelkezésre álló virtuális címterület folyamatos csökkenését.
Állapot
A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.
További információ
A Windows 2012 R2 lehetővé teszi, hogy a virtuális címterület akár 128 TB-ra is növelhető. Ezért előfordulhat, hogy ez a probléma nem fordul elő Windows 2012 R2 környezetekben. További információt a Windows fejlesztői központ következő témakörében talál:
Ha azt tapasztalja, hogy a virtuális címtartomány száma a javítás alkalmazása után is folyamatosan növekszik, akkor az Page_allocated kiterjesztett esemény használatával megállapíthatja, hogy mely lekérdezések vagy műveletek igényelnek nagy mennyiségű memóriát. A minta parancsprogram így néz ki:
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) GOEzek általában naplók biztonsági mentései és indexkarbantartási műveletek, amelyek gyakran fordulnak elő.