Nachdem Sie dieses Update angewendet haben, müssen Sie das Ablaufverfolgungsflag -T8075 als Startparameter hinzufügen, um diese Änderung zu aktivieren.
Symptome
Wenn Sie eine Abfrage in einer 64-Bit-Version von Microsoft SQL Server 2012 ausführen, erhalten Sie im SQL Server Fehlerprotokoll eine Fehlermeldung mit nicht genügend Arbeitsspeicher:
Hinweis
Fehler beim Zuordnen von Seiten: FAIL_PAGE_ALLOCATION 513
Abfragen dauern lange, bis die Ausführung abgeschlossen ist, und es treten SOS_MEMORY_TOPLEVELBLOCKALLOCATOR Wartezeiten auf.
Wenn Sie die folgenden Informationspunkte untersuchen, werden Sie feststellen, dass der virtuelle Adressraum sehr gering ist:
- DBCC MEMORYSTATUS – Abschnitt "Prozess-/Systemanzahl" – Verfügbarer virtueller Speicher
- DMV: sys.dm_os_process_memory – spaltenbasierte virtual_address_space_available_kb
Diese Werte beginnen bei einem x64-Prozess bei etwa 8 Terabyte (TB) und steigen weiter nach unten und erreichen einige Gigabyte (GB).
Wenn Sie sich in der Phase befinden, in der der verfügbare virtuelle Adressraum sehr gering ist, können Abfragen, die versuchen, die Speicherbelegung durchzuführen, auch auf den Wartetyp CMEMTHREAD stoßen.
Die folgenden Datenpunkte werden im Laufe der Zeit weiter zunehmen:
- DMV: sys.dm_os_process_memory und sys.dm_os_memory_nodes – spaltenbasierte virtual_address_space_reserved_kb
- DBCC MEMORYSTATUS – Abschnitt "Speicher-Manager" – RESERVIERTE VM
Diese Werte erhöhen sich in der Regel um ein Vielfaches des "maximalen Serverarbeitsspeichers" auf fast 8 TB.
Ursache
Wenn der SQL Server Prozess den Zustand erreicht hat, in dem Gesamtserverarbeitsspeicher = Zielserverarbeitsspeicher = maximaler Serverarbeitsspeicher festgelegt ist, gibt es Richtlinien in SQL Server Speicher-Manager, damit neue Zuordnungen mehrere 8-KB-Seiten vorübergehend erfolgreich anfordern. Wiederholtes Zuordnungsmuster unter einer solchen Bedingung kann zu einer Fragmentierung der Speicherblöcke und zum Verbrauch des virtuellen Adressraums führen. Wenn dieser Vorgang mehrmals wiederholt wird, ist der SQL Server virtuelle Adressraum erschöpft, und Sie werden die zuvor erwähnten Symptome bemerken.
Lösung
Informationen zum kumulativen Update
Das Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben.
Empfehlung: Installieren Sie das neueste kumulative Update für SQL Server
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Es wird empfohlen, die neuesten kumulativen Updates für SQL Server herunterzuladen und zu installieren:
Dieser Hotfix verhindert, dass nicht genügend Arbeitsspeicher vorhanden ist und dass der verfügbare virtuelle Adressraum kontinuierlich reduziert wird.
Status
Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.
Weitere Informationen
Mit Windows 2012 R2 kann der virtuelle Adressraum bis zu 128 TB vergrößert werden. Daher bemerken Sie dieses Problem möglicherweise nicht in Windows 2012 R2-Umgebungen. Weitere Informationen finden Sie im folgenden Thema im Windows Dev Center:
Arbeitsspeicherlimits für Windows- und Windows Server-Versionen
Wenn der virtuelle Adressraum auch nach dem Anwenden des Fixs kontinuierlich wächst, können Sie mithilfe des Page_allocated erweiterten Ereignisses ermitteln, welche Abfragen oder Vorgänge große Speicherblöcke anfordern. Ein Beispielskript sieht wie folgt aus:
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) GOIn der Regel handelt es sich dabei um Protokollsicherungen und Indizierungswartungsvorgänge, die häufig auftreten.