După ce aplicați această actualizare, trebuie să adăugați semnalizarea de urmărire -T8075 ca parametru de pornire pentru a activa această modificare.
Simptome
Când rulați o interogare într-o versiune de Microsoft SQL Server 2012 pe 64 de biți, primiți un mesaj de eroare memorie insuficientă care seamănă cu următorul, în jurnalul de erori SQL Server:
Notă
Pagini de alocare nereușită: FAIL_PAGE_ALLOCATION 513
Interogările necesită mult timp pentru a se termina de executat și întâmpină SOS_MEMORY_TOPLEVELBLOCKALLOCATOR așteptări.
Atunci când examinați următoarele informații, veți descoperi că spațiul de adrese virtual disponibil este foarte redus:
- DBCC MEMORYSTATUS - Secțiunea Contoare proces/sistem - Memorie virtuală disponibilă
- DMV: sys.dm_os_process_memory - coloana virtual_address_space_available_kb
Aceste valori încep în jurul valorii de 8 terabyți (TB) într-un proces x64 și continuă să scadă și ajung la câțiva gigabyți (GB).
Atunci când vă aflați într-o etapă în care spațiul disponibil pentru adrese virtuale este foarte redus, interogările care încearcă să efectueze alocarea memoriei pot întâmpina, de asemenea, un tip de așteptare al 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 memorie - VM rezervat
Aceste valori vor crește de obicei în multipli ai valorii "memorie maximă de server", până la aproape 8 TB.
Cauză
Atunci când procesul SQL Server a ajuns la starea în care Memorie totală server = Memorie server țintă = memorie maximă server, există politici în managerul de memorie SQL Server pentru a permite ca noile alocări să solicite simultan mai multe pagini de 8 KB. Modelul de alocare repetat într-o astfel de condiție poate provoca fragmentarea blocurilor de memorie și consumul de spațiu de adrese virtual. Dacă acest proces se repetă de mai multe ori, spațiul de adrese virtual SQL Server se va epuiza și veți observa simptomele menționate anterior.
Rezolvare
Informații despre actualizarea cumulativă
Problema a fost remediată pentru prima dată în următoarea actualizare cumulativă a SQL Server.
Recomandare: Instalați cea mai recentă actualizare cumulativă pentru SQL Server
Fiecare actualizare cumulativă nouă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu 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 insuficientă, cât și reducerea continuă a spațiului disponibil pentru adrese virtuale.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.
Mai multe informații
Windows 2012 R2 permite ca spațiul de adrese virtuale să crească până la 128 TB. Prin urmare, este posibil să nu observați această problemă în mediile Windows 2012 R2. Pentru mai multe informații, consultați următorul subiect din Centrul pentru dezvoltatori Windows:
Limite de memorie pentru versiunile Windows și Windows Server
Dacă observați o creștere continuă a spațiului de adrese virtuale chiar și după ce aplicați remedierea, puteți determina ce interogări sau operațiuni solicită volume mari de memorie, utilizând evenimentul extins Page_allocated. Un eșantion de script arată astfel:
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) GODe obicei, acestea sunt copii backup ale jurnalelor și operațiuni de întreținere a indexurilor, care au loc frecvent.