Beheben von OOM-Problemen (nicht genügend Arbeitsspeicher)

Gilt für:SQL Server

In-Memory OLTP verwendet mehr Arbeitsspeicher und auf unterschiedliche Weise als SQL Server. Es ist möglich, dass die Menge an Arbeitsspeicher, den Sie installiert und für In-Memory OLTP zugewiesen haben, für Ihre wachsenden Anforderungen unzureichend ist. sodass kein ausreichender Arbeitsspeicher zur Verfügung steht. In diesem Thema erfahren Sie, wie Sie OOM-Situationen (Out of Memory, nicht genügend Arbeitsspeicher) beheben. Weitere Hinweise zur Vermeidung von Situationen mit unzureichendem Arbeitsspeicher finden Sie auch unter dem Thema Überwachung und Problembehebung bei der Arbeitsspeichernutzung .

In diesem Thema

Thema Übersicht
Beheben von Fehlern aufgrund von OOM-Bedingungen bei der Datenbankwiederherstellung Was zu tun ist, wenn Die Fehlermeldung "Wiederherstellungsvorgang für datenbank 'databaseName>' fehlgeschlagen ist, weil nicht genügend Arbeitsspeicher im Ressourcenpool '<resourcePoolName>'" vorhanden ist.<
Beheben von Beeinträchtigungen der Arbeitsauslastung durch wenig oder unzureichenden Arbeitsspeicher Erläutert, wie Sie vorgehen, wenn die Leistung durch unzureichenden Arbeitsspeicher beeinträchtigt wird.
Beheben von Seitenzuordnungsfehlern aufgrund von unzureichendem Arbeitsspeicher, obwohl ausreichend Arbeitsspeicher verfügbar ist Was zu tun ist, wenn Sie die Fehlermeldung "Zuordnung von Seitenzuweisungen für datenbank 'databaseName>' aufgrund unzureichender Arbeitsspeicher im Ressourcenpool '<resourcePoolName>' erhalten.< … nicht zugelassen“ vorgehen, wenn ausreichend Arbeitsspeicher für den Vorgang verfügbar ist.
Bewährte Methoden zum Verwenden von In-Memory OLTP in einer Umgebung mit virtuellen Computern Zu berücksichtigende Punkte beim Verwenden von In-Memory-OLTP in einer virtualisierten Umgebung.

Beheben von Fehlern aufgrund von OOM-Bedingungen bei der Datenbankwiederherstellung

Wenn Sie versuchen, eine Datenbank wiederherzustellen, wird möglicherweise die Fehlermeldung angezeigt: "Der Wiederherstellungsvorgang für datenbank 'databaseName>' ist aufgrund unzureichender Arbeitsspeicher im Ressourcenpool '<resourcePoolName>' fehlgeschlagen."< Dies weist darauf hin, dass der Server nicht genügend Arbeitsspeicher zum Wiederherstellen der Datenbank zur Verfügung hat.

Der Server, auf dem Sie eine Datenbank wiederherstellen, muss genügend verfügbaren Arbeitsspeicher für die speicheroptimierten Tabellen in der Datenbanksicherung besitzen. Andernfalls wird die Datenbank nicht online geschaltet und als fehlerverdächtig markiert.

Hat der Server genügend physischen Arbeitsspeicher, aber dieser Fehler tritt weiterhin auf, könnte es sein, dass andere Prozesse zu viel Arbeitsspeicher beanspruchen oder ein Konfigurationsproblem dazu führt, dass nicht genügend Arbeitsspeicher für die Wiederherstellung verfügbar ist. Liegt ein Problem dieser Art vor, können Sie die folgenden Maßnahmen ergreifen, um mehr Arbeitsspeicher für die Wiederherstellung verfügbar zu machen:

  • Schließen Sie ausgeführte Anwendungen vorübergehend.
    Indem Sie eine oder mehrere aktive Anwendungen schließen oder Dienste, die derzeit nicht benötigt werden, beenden, machen Sie den Arbeitsspeicher, der von den Anwendungen oder Diensten verwendet wurde, für den Wiederherstellungsvorgang verfügbar. Nach der erfolgreichen Wiederherstellung können Sie sie wieder starten.

  • Erhöhen Sie den Wert von MAX_MEMORY_PERCENT.
    Ist die Datenbank an einen Ressourcenpool gebunden(dies ist die bewährte Methode), wird der für einen Wiederherstellungsvorgang verfügbare Arbeitsspeicher durch MAX_MEMORY_PERCENT gesteuert. Ist der Wert zu niedrig, schlägt ein Wiederherstellen fehl. In diesem Codeausschnitt wird MAX_MEMORY_PERCENT für den PoolHk-Ressourcenpool in 70 % des installierten Arbeitsspeichers geändert.

    Wichtig

    Wenn der Server auf einem virtuellen Computer ausgeführt wird und nicht dediziert ist, legen Sie den Wert von MIN_MEMORY_PERCENT auf denselben Wert wie MAX_MEMORY_PERCENT fest.
    Weitere Informationen finden Sie im Thema Verwenden von In-Memory-OLTP in einer Umgebung mit virtuellen Computern.

    -- disable resource governor  
    ALTER RESOURCE GOVERNOR DISABLE  
    
    -- change the value of MAX_MEMORY_PERCENT  
    ALTER RESOURCE POOL PoolHk  
    WITH  
         ( MAX_MEMORY_PERCENT = 70 )  
    GO  
    
    -- reconfigure the Resource Governor  
    --    RECONFIGURE enables resource governor  
    ALTER RESOURCE GOVERNOR RECONFIGURE  
    GO  
    
    

    Weitere Informationen zu maximalen Werten für MAX_MEMORY_PERCENT finden Sie im Themenabschnitt Prozentsatz des für speicheroptimierte Tabellen und Indizes verfügbaren Arbeitsspeichers.

  • Erhöhen Sie Max. Serverarbeitsspeicher.
    Informationen zum Konfigurieren von Max. Serverarbeitsspeicher finden Sie unter dem Thema Serverkonfigurationsoptionen für den Serverarbeitsspeicher.

Beheben von Beeinträchtigungen der Arbeitsauslastung durch wenig oder unzureichenden Arbeitsspeicher

Grundsätzlich sind Situationen mit wenig oder unzureichendem Arbeitsspeicher zu vermeiden. Häufig lassen sich OOM-Situationen durch eine durchdachte Planung und Überwachung vermeiden. Aber auch die beste Planung schützt nicht vor unvorhersehbaren Ereignissen, die zu knappem oder unzureichendem Arbeitsspeicher führen können. Eine OOM-Bedingung kann in zwei Schritten behoben werden:

  1. Öffnen einer DAC (dedizierte Administratorverbindung)

  2. Korrekturmaßnahme

Öffnen einer DAC (dedizierte Administratorverbindung)

SQL Server stellt eine dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC) zur Verfügung. Mit der DAC können Administratoren auf eine ausgeführte Instanz der SQL Server-Datenbank-Engine zugreifen, um Probleme auf dem Server zu beheben, selbst wenn der Server auf andere Clientverbindungen nicht reagiert. Der DAC ist über das sqlcmd Hilfsprogramm und SQL Server Management Studio verfügbar.

Hilfe zum Verwenden von DAC mithilfe von SSMS oder sqlcmd finden Sie unter Diagnoseverbindung für Datenbankadministratoren.

Korrekturmaßnahme

Um die OOM-Bedingung zu beheben, müssen Sie entweder vorhandenen Arbeitsspeicher freigeben, indem Sie die Arbeitsspeichernutzung reduzieren, oder den Tabellen im Arbeitsspeicher mehr Arbeitsspeicherkapazität zur Verfügung stellen.

Freigeben von vorhandenem Arbeitsspeicher

Löschen unwichtiger Zeilen aus speicheroptimierten Tabellen und Abwarten der Garbage Collection

Sie können unbedeutende Zeilen aus einer speicheroptimierten Tabelle entfernen. Der Garbage Collector gibt den von diesen Zeilen belegten Speicher wieder an den verfügbaren Arbeitsspeicher zurück. Garbage-Zeilen werden von der In-Memory-OLTP-Engine auf aggressive Weise gesammelt. Allerdings kann die Garbage Collection durch eine Transaktion mit langer Ausführungszeit verhindert werden. Beispiel: Bei einer Transaktion, die fünf Minuten ausgeführt wird, kann für Zeilenversionen, die aufgrund von Update-/Löschvorgängen erstellt wurden, während die Transaktion aktiv war, keine Garbage Collection ausgeführt werden.

Verschieben einer oder mehrerer Zeilen in eine datenträgerbasierte Tabelle

In den folgenden TechNet-Artikeln finden Sie Richtlinien zum Verschieben von Zeilen aus einer speicheroptimierten Tabelle in eine datenträgerbasierte Tabelle.

Erhöhen der verfügbaren Arbeitsspeicherkapazität

Erhöhen des MAX_MEMORY_PERCENT-Werts für den Ressourcenpool

Wenn Sie keinen benannten Ressourcenpool für Ihre In-Memory-Tabellen erstellt haben, sollten Sie dies tun und ihre IN-Memory OLTP-Datenbanken daran binden. Im Thema "Binden einer Datenbank mit speicheroptimierten Tabellen an einen Ressourcenpool " finden Sie Anleitungen zum Erstellen und Binden Ihrer OLTP-Datenbanken im Arbeitsspeicher an einen Ressourcenpool.

Wenn Ihre OLTP-Datenbank im Arbeitsspeicher an einen Ressourcenpool gebunden ist, können Sie möglicherweise den Prozentsatz des Arbeitsspeichers erhöhen, auf den der Pool zugreifen kann. Im Unterabschnitt Ändern von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT für einen vorhandenen Pool finden Sie entsprechende Anleitungen zum Ändern.

Erhöhen Sie den Wert von MAX_MEMORY_PERCENT.
In diesem Codeausschnitt wird MAX_MEMORY_PERCENT für den PoolHk-Ressourcenpool in 70 % des installierten Arbeitsspeichers geändert.

Wichtig

Wenn der Server auf einem virtuellen Computer ausgeführt wird und nicht dediziert ist, legen Sie den Wert von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT auf denselben Wert fest.
Weitere Informationen finden Sie im Thema Verwenden von In-Memory-OLTP in einer Umgebung mit virtuellen Computern.

-- disable resource governor  
ALTER RESOURCE GOVERNOR DISABLE  
  
-- change the value of MAX_MEMORY_PERCENT  
ALTER RESOURCE POOL PoolHk  
WITH  
     ( MAX_MEMORY_PERCENT = 70 )  
GO  
  
-- reconfigure the Resource Governor to enabled it
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  

Weitere Informationen zu maximalen Werten für MAX_MEMORY_PERCENT finden Sie im Themenabschnitt Prozentsatz des für speicheroptimierte Tabellen und Indizes verfügbaren Arbeitsspeichers.

Installieren zusätzlichen Arbeitsspeichers

Die beste Lösung besteht letztendlich darin, falls möglich, zusätzlichen physischen Arbeitsspeicher zu installieren. Wenn Sie dies tun, denken Sie daran, dass Sie wahrscheinlich auch den Wert von MAX_MEMORY_PERCENT erhöhen können (siehe Unterthema Änderung MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT in einem vorhandenen Pool), da SQL Server wahrscheinlich nicht mehr Arbeitsspeicher benötigt, sodass Sie den größten Teil des neu installierten Speichers für den Ressourcenpool zur Verfügung stellen können.

Wichtig

Wenn der Server auf einem virtuellen Computer ausgeführt wird und nicht dediziert ist, legen Sie den Wert von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT auf denselben Wert fest.
Weitere Informationen finden Sie im Thema Verwenden von In-Memory-OLTP in einer Umgebung mit virtuellen Computern.

Beheben von Seitenzuordnungsfehlern aufgrund von unzureichendem Arbeitsspeicher, obwohl ausreichend Arbeitsspeicher verfügbar ist

Wenn Sie die Fehlermeldung Disallowing page allocations for database '*\<databaseName>*' due to insufficient memory in the resource pool '*\<resourcePoolName>*'. See 'https://go.microsoft.com/fwlink/?LinkId=330673' for more information. im Fehlerprotokoll erhalten, obwohl der verfügbare physische Arbeitsspeicher zum Zuordnen der Seite ausreichend ist, kann dies daran liegen, dass die Ressourcenkontrolle deaktiviert ist. Wenn die Ressourcenkontrolle deaktiviert ist, führt MEMORYBROKER_FOR_RESERVE zu einem künstlichen Mangel an Arbeitsspeicher.

Um dieses Problem zu beheben, müssen Sie die Ressourcenkontrolle aktivieren.

Weitere Informationen zu Einschränkungen sowie Anweisungen zum Aktivieren des Resource Governors mit dem Objekt-Explorer, über Eigenschaften des Resource Governors oder mit Transact-SQL finden Sie unter Aktivieren des Resource Governors .

Bewährte Methoden zum Verwenden von In-Memory OLTP in einer Umgebung mit virtuellen Computern

Servervirtualisierung kann durch eine verbesserte Anwendungsbereitstellung, Wartung, Verfügbarkeit sowie Sicherungs- und Wiederherstellungsprozesse das IT-Kapital und die Betriebskosten Ihres Unternehmens senken und die IT-Effizienz steigern. Dank der neuesten technologischen Entwicklungen können komplexe Datenbankarbeitslasten mithilfe der Virtualisierung leichter konsolidiert werden. Dieses Thema enthält bewährte Methoden zur Verwendung von SQL Server In-Memory-OLTP in einer virtualisierten Umgebung.

Vorabbelegung von Arbeitsspeicher

Für den Arbeitsspeicher in einer virtualisierten Umgebung sind bessere Leistung und erweiterte Unterstützung zentrale Faktoren. Sie müssen sowohl in der Lage sein, virtuellen Computern auf Basis der jeweiligen Anforderungen (Last zu Spitzenzeiten und außerhalb von Spitzenzeiten) schnell Arbeitsspeicher zuzuordnen als auch sicherzustellen, dass dieser Arbeitsspeicher nicht verschwendet wird. Der dynamischer Arbeitsspeicher von Hyper-V erhöht die Flexibilität bei der Zuweisung und Verwaltung von Arbeitsspeicher zwischen virtuellen Computern, die auf einem Host ausgeführt werden.

Einige bewährte Methoden für die Virtualisierung und Verwaltung von SQL Server müssen geändert werden, wenn eine Datenbank mit speicheroptimierten Tabellen virtualisiert wird. Ohne speicheroptimierte Tabellen lauten zwei bewährte Methoden wie folgt:

  • Bei Verwendung von „Min. Serverarbeitsspeicher“ sollte nur die tatsächlich erforderliche Speichermenge zugewiesen werden, sodass ausreichend Speicher für andere Prozesse verbleibt (und Auslagerungen vermieden werden).
  • Legen Sie den Wert für die Vorabbelegung von Arbeitsspeicher nicht zu hoch fest. Andernfalls erhalten andere Prozesse u. U. nicht ausreichend Speicher, wenn sie ihn brauchen. Dies kann zu Speicherauslagerungen führen.

Wenn Sie für eine Datenbank mit speicheroptimierten Tabellen die oben genannten Methoden verwenden, kann der Versuch, die Datenbank wiederherzustellen, dazu führen, dass die Datenbank im Status „Wiederherstellung steht aus“ hängen bleibt, obwohl genügend Arbeitsspeicher zum Wiederherstellen der Datenbank verfügbar ist. Die Ursache hierfür ist, dass In-Memory-OLTP die Daten beim Starten aggressiver in den Speicher lädt, als die dynamische Speicherbelegung den Arbeitsspeicher der Datenbank zuweist.

Lösung

Um dieses Risiko abzuschwächen, ordnen Sie der Datenbank vorab genügend Arbeitsspeicher zu, um die Datenbank wiederherzustellen oder neu zu starten. Verwenden Sie hierfür nicht den Minimalwert auf Basis des dynamischen Speichers, um den zusätzlichen Arbeitsspeicher bei Bedarf bereitzustellen.

Weitere Informationen

Verwalten des Arbeitsspeichers für In-Memory-OLTP
Überwachung und Fehlerbehebung für die Arbeitsspeicherauslastung
Binden einer Datenbank mit speicheroptimierten Tabellen an einen Ressourcenpool
Handbuch zur Architektur der Speicherverwaltung
Serverkonfigurationsoptionen für den Serverarbeitsspeicher