După ce aplicați această actualizare, trebuie să adăugați semnalizatorul Trace-T8075 ca parametru de pornire pentru a activa această modificare.
Simptome
Atunci când efectuați o interogare într-o versiune 64 de Microsoft SQL Server 2012, primiți un mesaj de eroare out-of-Memory care seamănă cu următorul în Jurnalul de erori SQL Server:
Pagini de alocare nereușite: FAIL_PAGE_ALLOCATION 513
Interogările durează mult timp pentru a termina execuția și a întâlni SOS_MEMORY_TOPLEVELBLOCKALLOCATOR așteaptă. Atunci când Examinați următoarele puncte de informații, veți descoperi că există un spațiu de adrese virtuale foarte redus:
-
DBCC MEMORYSTATUS-proces/sistem Counts section-memorie virtuală disponibilă
-
DMV: sys.dm_os_process_memory-coloana virtual_address_space_available_kb
Aceste valori încep cu aproximativ 8 TB (TB) într-un proces x64 și continuă să urce și să ajungă la câțiva gigaocteți (GO). Atunci când sunteți în stadiul în care spațiul de adrese virtuale disponibil este foarte scăzut, interogările care încearcă să efectueze alocarea memoriei pot, de asemenea, să întâmpine un tip de așteptare de CMEMTHREAD. Următoarele puncte de date vor continua să crească în timp:
-
DMV: sys.dm_os_process_memory și sys.dm_os_memory_nodes-coloana virtual_address_space_reserved_kb
-
DBCC MEMORYSTATUS-secțiunea Manager de memorie-VM rezervat
Aceste valori vor crește, de obicei, în multipli din valoarea "Max Server Memory" de până la aproape 8 TB.
Cauză
Atunci când procesul de SQL Server a ajuns la starea în care memoria totală a serverului = memorie server țintă = memorie de server Max, există politici în SQL Server Memory Manager pentru a permite alocărilor noi să solicite mai multe pagini de 8 KB pentru a reuși temporar. Modelul de alocare repetat sub această condiție poate cauza fragmentarea blocurilor de memorie și a consumului de spațiu de adrese virtuale. Dacă acest proces se repetă de mai multe ori, spațiul de adrese virtuale SQL Server va fi epuizat și veți observa simptomele care au fost menționate mai sus.
Rezolvare
Informații despre actualizarea cumulativă
Problema a fost remediată pentru prima dată în următoarea actualizare cumulativă de SQL Server.
Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Vă recomandăm să descărcați și să instalați cele mai recente actualizări cumulative pentru SQL Server:
Această remediere rapidă previne atât memoria, cât și reducerea continuă a spațiului de adrese virtuale disponibile pe care le puteți întâmpina.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.
Mai multe informații
-
Windows 2012 R2 permite spațiului de adrese virtuale să crească cât mai mare 128 TB. Prin urmare, este posibil să nu observați această problemă în medii Windows 2012 R2. Pentru mai multe informații, consultați următorul subiect în Windows Dev Center:limite de memorie pentru versiunile Windows și Windows Server
-
Dacă vedeți creștere continuă în spațiul de adrese virtuale chiar și după ce aplicați remedierea, puteți determina ce interogări sau operațiuni solicită bucăți mari de memorie utilizând Page_allocated eveniment extins. Un exemplu de script arată astfel:
CREATE EVENT SESSION [memory_tracking] ON SERVERADD 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
De obicei, acestea sunt backupuri în jurnal și operațiuni de întreținere index, care apar frecvent.