Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
In-Memory-OLTP verwendet mehr Arbeitsspeicher und nutzt diesen auf andere Weise als SQL-Server. Es ist möglich, dass die Menge an Arbeitsspeicher, die Sie installiert und In-Memory OLTP zugewiesen haben, für Ihre wachsenden Anforderungen nicht mehr ausreicht. Falls ja, könnte Ihnen der Arbeitsspeicher ausgehen. In diesem Thema erfahren Sie, wie Sie OOM-Situationen (Out of Memory, nicht genügend Arbeitsspeicher) beheben. Siehe Arbeitsspeichernutzung überwachen und Fehler beheben für Hinweise, mit denen Sie viele OOM-Situationen vermeiden können.
In diesem Thema behandelt
| Thema | Übersicht |
|---|---|
| Beheben von Fehlschlägen bei der Datenbankwiederherstellung aufgrund von OOM | Erläutert, wie Sie bei der Fehlermeldung „Fehler beim Wiederherstellungsvorgang für Datenbank „<Datenbankname>“ aufgrund von unzureichendem Arbeitsspeicher im Ressourcenpool „<resourcePoolName>“ vorgehen. |
| Auswirkungen von Speichermangel oder OOM-Bedingungen auf den Workload beheben | Was tun, wenn du feststellst, dass schlechte Gedächtnisprobleme die Leistung negativ beeinflussen? |
| Beheben von Seitenzuordnungsfehlern aufgrund von unzureichendem Arbeitsspeicher, obwohl ausreichend Arbeitsspeicher verfügbar ist | Was zu tun ist, wenn die Fehlermeldung „Seitenzuweisungen für die Datenbank '<databaseName>' werden aufgrund unzureichenden Arbeitsspeichers im Ressourcenpool '<resourcePoolName>' nicht zugelassen“ angezeigt wird. …“ wenn für den Vorgang ausreichend verfügbarer Speicher vorhanden 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 Sie Fehler beim Wiederherstellen der Datenbank aufgrund von OOM
Wenn Sie versuchen, eine Datenbank wiederherzustellen, erhalten Sie möglicherweise folgende Fehlermeldung: „Fehler beim Wiederherstellungsvorgang für Datenbank „<databaseName>“ aufgrund von unzureichendem Arbeitsspeicher im Ressourcenpool „<resourcePoolName>“. Dies gibt an, dass der Server nicht genügend verfügbaren Arbeitsspeicher zum Wiederherstellen der Datenbank 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. Dieser Codeausschnitt legt MAX_MEMORY_PERCENT für den Ressourcenpool PoolHk auf 70 % des installierten Arbeitsspeichers fest.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 GOWeitere 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.
Auswirkungen von Speicherknappheit oder OOM-Bedingungen auf den Workload beheben
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:
Ö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. Die 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ßnahmen ergreifen
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
Nicht wesentliche Zeilen aus speicheroptimierten Tabellen löschen und auf die Speicherbereinigung warten
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 5 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
Wert von MAX_MEMORY_PERCENT für den Ressourcenpool erhöhen
Wenn Sie keinen benannten Ressourcenpool für die Tabellen im Arbeitsspeicher erstellt haben, sollten Sie dies nachholen und die In-Memory-OLTP-Datenbanken daran binden. Im Thema Binden einer Datenbank mit speicheroptimierten Tabellen an einen Ressourcenpool finden Sie eine Anleitung zum Erstellen und Binden Ihrer In-Memory-OLTP-Datenbanken an einen Ressourcenpool.
Wenn die In-Memory-OLTP -Datenbank an einen Ressourcenpool gebunden ist, können Sie den Arbeitsspeicheranteil, auf den der Pool zugreifen kann, erhöhen. Siehe den Unterabschnitt Ändern von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT in einem bestehenden Pool mit Anleitungen zum Ändern der Werte von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT für einen Ressourcenpool.
Erhöhen Sie den Wert von MAX_MEMORY_PERCENT.
Dieser Codeausschnitt legt MAX_MEMORY_PERCENT für den Ressourcenpool PoolHk auf 70 % des installierten Arbeitsspeichers fest.
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. In diesem Fall sollten Sie bedenken, dass Sie möglicherweise auch den Wert von MAX_MEMORY_PERCENT erhöhen können (siehe Unterabschnitt Ändern von MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT für einen vorhandenen Pool), da SQL Server wahrscheinlich nicht mehr Arbeitsspeicher benötigen wird, und Sie einen großen bzw. den gesamten Teil des neu installierten Arbeitsspeichers dem 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 der Resource Governor deaktiviert ist, verursacht MEMORYBROKER_FOR_RESERVE künstlichen Speicherdruck.
Um dies zu beheben, müssen Sie den Resource Governor aktivieren.
Informationen zu Grenzwerten und Einschränkungen sowie Anleitungen zum Aktivieren des Resource Governors mit dem Objekt-Explorer, über die Eigenschaften des Resource Governors oder mit Transact-SQL finden Sie unter Resource Governor aktivieren.
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.
Speichervorbelegung
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 Vorzubelegung des Arbeitsspeichers 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.
Verwandte Inhalte
- Verwalten des Arbeitsspeichers für In-Memory-OLTP
- Überwachung und Problembehandlung für die Arbeitsspeicherauslastung mit In-Memory-OLTP
- Binden einer Datenbank mit speicheroptimierten Tabellen an einen Ressourcenpool
- Leitfaden zur Architektur der Speicherverwaltung
- Konfigurationsoptionen für den Serverarbeitsspeicher