Freigeben über


Beheben von Speicherproblemen

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. Wenn dies der Fall ist, könnte der Arbeitsspeicher ausgehen. In diesem Thema wird erläutert, wie Sie sich aus einer OOM-Situation erholen. Anleitungen zur Vermeidung vieler OOM-Situationen finden Sie unter Überwachen und Problembehandlung bei der Speicherauslastung .

In diesem Thema behandelt

Thema Überblick
Beheben von Datenbankwiederherstellungsfehlern aufgrund von OOM Was zu tun ist, wenn die Fehlermeldung "Wiederherstellungsvorgang für Datenbank '<databaseName>' fehlgeschlagen ist. Grund dafür ist unzureichender Arbeitsspeicher im Ressourcenpool '<resourcePoolName>'." angezeigt wird.
Beheben der Auswirkungen geringer Arbeitsspeicher- oder OOM-Bedingungen auf die Workload Was zu tun ist, wenn Sie Probleme mit geringem Arbeitsspeicher entdecken und dies die Leistung negativ beeinflusst.
Beheben von Seitenzuweisungsfehlern aufgrund unzureichendem Arbeitsspeicher, wenn genügend Arbeitsspeicher verfügbar ist Was zu tun ist, wenn Sie die Fehlermeldung "Seitenzuweisungen für die Datenbank '<databaseName>' aufgrund unzureichendem Arbeitsspeicher im Ressourcenpool '<resourcePoolName>' nicht zulässig sind" erhalten. ..." wenn der verfügbare Arbeitsspeicher für den Vorgang ausreicht.

Beheben von Datenbankwiederherstellungsfehlern aufgrund von OOM

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." Bevor Sie die Datenbank erfolgreich wiederherstellen können, müssen Sie das Problem mit unzureichendem Arbeitsspeicher beheben, indem Sie mehr Arbeitsspeicher verfügbar machen.

Um Wiederherstellungsfehler aufgrund von OOM zu beheben, erhöhen Sie den verfügbaren Speicher mithilfe eines oder mehrerer dieser Mittel, um den für den Wiederherstellungsvorgang verfügbaren Speicher vorübergehend zu erhöhen.

  • Schließen Sie vorübergehend ausgeführte Anwendungen.
    Indem Sie eine oder mehrere ausgeführte Anwendungen schließen, z. B. Visual Studio, Internet Explorer, OneNote und andere, stellen Sie den Arbeitsspeicher, den sie für den Wiederherstellungsvorgang verwendet haben, zur Verfügung. Sie können sie nach der erfolgreichen Wiederherstellung neu starten.

  • Erhöhen Sie den Wert von MAX_MEMORY_PERCENT.
    Dieser Codeausschnitt ändert MAX_MEMORY_PERCENT für den Ressourcenpool PoolHk auf 70% des installierten Arbeitsspeichers.

    Von Bedeutung

    Wenn der Server auf einer VM 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 "Bewährte Methoden: Verwenden von In-Memory OLTP in einer VM-Umgebung ".

    
    -- 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  
    
    

    Informationen zu maximal zulässigen Werten für MAX_MEMORY_PERCENT finden Sie im Themenabschnitt " Prozentsatz des Arbeitsspeichers, der für speicheroptimierte Tabellen und Indizes verfügbar ist"

  • Konfigurieren Sie den maximalen Serverspeicher neu.
    Informationen zum Konfigurieren des maximalen Serverspeichers finden Sie im Thema "Optimieren der Serverleistung mithilfe von Speicherkonfigurationsoptionen".

Beheben der Auswirkungen geringer Arbeitsspeicher- oder OOM-Bedingungen auf die Workload

Offensichtlich ist es am besten, nicht in eine Situation mit geringem Arbeitsspeicher oder Speichermangel (OOM, Out of Memory) zu geraten. Eine gute Planung und Überwachung kann dazu beitragen, OOM-Situationen zu vermeiden. Dennoch sieht die beste Planung nicht immer vor, was tatsächlich passiert, und Sie könnten mit geringem Arbeitsspeicher oder OOM enden. Es gibt zwei Schritte zum Wiederherstellen von OOM:

  1. Öffnen einer DAC (dedizierte Administratorverbindung)

  2. Korrekturmaßnahmen ergreifen

Öffnen einer DAC (dedizierte Administratorverbindung)

Microsoft SQL Server stellt eine dedizierte Administratorverbindung (DAC) bereit. Der DAC ermöglicht es einem Administrator, auf eine ausgeführte Instanz des SQL Server-Datenbankmoduls zuzugreifen, um Probleme auf dem Server zu beheben, auch wenn der Server nicht auf andere Clientverbindungen reagiert. Der DAC ist über das sqlcmd Hilfsprogramm und SQL Server Management Studio (SSMS) verfügbar.

Anleitungen zur Verwendung sqlcmd und DAC finden Sie unter Verwenden einer dedizierten Administratorverbindung. Anleitungen zur Verwendung von DAC über SSMS finden Sie unter How to: Use the Dedicated Administrator Connection with SQL Server Management Studio.

Korrekturmaßnahmen ergreifen

Um Ihre OOM-Bedingung zu beheben, müssen Sie entweder vorhandenen Arbeitsspeicher freigeben, indem Sie die Nutzung verringern oder mehr Arbeitsspeicher für Ihre In-Memory-Tabellen verfügbar machen.

Freigeben vorhandener Arbeitsspeicher

Löschen Sie nicht notwendige speicheroptimierte Tabellenzeilen und warten Sie auf die Speicherbereinigung.

Sie können nicht wesentliche Zeilen aus einer speicheroptimierten Tabelle entfernen. Der Garbage Collector gibt den von diesen Zeilen verwendeten Speicher an den verfügbaren Arbeitsspeicher zurück. . Das OLTP-Modul im Arbeitsspeicher sammelt die Garbage Rows aggressiv. Eine lange ausgeführte Transaktion kann jedoch die Garbage Collection verhindern. Wenn Sie beispielsweise eine Transaktion haben, die 5 Minuten lang ausgeführt wird, können alle Zeilenversionen, die aufgrund von Aktualisierungs- oder Löschvorgängen erstellt wurden, während die Transaktion aktiv war, nicht zur Speicherbereinigung freigegeben werden.

Verschieben einer oder mehrerer Zeilen in eine datenträgerbasierte Tabelle

Die folgenden TechNet-Artikel enthalten Anleitungen zum Verschieben von Zeilen aus einer speicheroptimierten Tabelle zu einer datenträgerbasierten Tabelle.

Erhöhen des verfügbaren Arbeitsspeichers

Erhöhen des Werts von MAX_MEMORY_PERCENT im 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. Informationen zum Erstellen und Binden ihrer In-Memory OLTP-Datenbanken an einen Ressourcenpool finden Sie im Thema "Binden einer Datenbank mit Memory-Optimized Tabellen an einen Ressourcenpool ".

Wenn Ihre In-Memory OLTP-Datenbank an einen Ressourcenpool gebunden ist, können Sie möglicherweise den Prozentsatz des Arbeitsspeichers erhöhen, auf den der Pool zugreifen kann. Eine Anleitung zum Ändern des Werts von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT für einen Ressourcenpool finden Sie im Unterthema Change MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT in einem vorhandenen Pool .

Erhöhen Sie den Wert von MAX_MEMORY_PERCENT.
Dieser Codeausschnitt ändert MAX_MEMORY_PERCENT für den Ressourcenpool PoolHk auf 70% des installierten Arbeitsspeichers.

Von Bedeutung

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 "Bewährte Methoden: Verwenden von In-Memory OLTP in einer VM-Umgebung ".

  
-- 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  
  

Informationen zu den Maximalwerten für MAX_MEMORY_PERCENT finden Sie im Themenabschnitt " Prozentsatz des Arbeitsspeichers, der für speicheroptimierte Tabellen und Indizes verfügbar ist".

Installieren von zusätzlichem Arbeitsspeicher

Letztendlich ist die beste Lösung, wenn möglich, zusätzlichen physischen Speicher zu installieren. Wenn Sie dies tun, denken Sie daran, dass Sie wahrscheinlich auch in der Lage sein werden, den Wert von MAX_MEMORY_PERCENT zu erhöhen (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.

Von Bedeutung

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 "Bewährte Methoden: Verwenden von In-Memory OLTP in einer VM-Umgebung ".

Beheben von Seitenzuweisungsfehlern aufgrund unzureichendem Arbeitsspeicher, wenn genügend Arbeitsspeicher verfügbar ist

Wenn die Fehlermeldung "Seitenzuweisungen für die Datenbank '<databaseName>' aufgrund unzureichendem Speicher im Ressourcenpool '<resourcePoolName>' verweigert werden, angezeigt wird. Weitere Informationen finden Sie unter 'https://go.microsoft.com/fwlink/?LinkId=330673' im Fehlerprotokoll, wenn der verfügbare physische Arbeitsspeicher ausreicht, um die Seite zuzuweisen, kann dies auf einen deaktivierten Ressourcengouverneur zurückzuführen sein. Wenn der Ressourcengouverneur deaktiviert ist, wird MEMORYBROKER_FOR_RESERVE künstlichen Arbeitsspeicherdruck auslösen.

Um dies zu beheben, müssen Sie den Ressourcengouverneur aktivieren.

Informationen zu Grenzwerten und Einschränkungen sowie Anleitungen zum Aktivieren der Ressourcensteuerung mithilfe des Objekt-Explorers, der Ressourcensteuerungseigenschaften oder von Transact-SQL finden Sie unter "Ressourcengouverneur aktivieren ".

Siehe auch

Verwalten des Speichers für In-Memory OLTP
Überwachen und Behandeln von Problemen mit der Speicherauslastung
Binden einer Datenbank mit Memory-Optimized Tabellen an einen Ressourcenpool
Bewährte Methoden: Verwenden von In-Memory OLTP in einer VM-Umgebung