MSSQLSERVER_8645

Gilt für:SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 8645
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name MEMTIMEDOUT_ERR
Meldungstext Timeout beim Warten auf die Arbeitsspeicherressourcen für die Abfrageausführung im Ressourcenpool '%ls' (%ld). Führen Sie die Abfrage erneut aus.

Erklärung

Dieser Fehler wird ausgelöst, wenn eine SQL Server Anforderung über einen längeren Zeitraum auf den Arbeitsspeicher der Abfrageausführung (Query Execution, QE) gewartet hat und kein Arbeitsspeicher verfügbar war. Der Abfrageausführungsspeicher wird hauptsächlich für Sortiervorgänge, Hashvorgänge, Massenkopiervorgänge sowie indexerstellung und -auffüllung verwendet. Eine Abfrage, die einen dieser Vorgänge ausführt, fordert eine Speicherzuweisung an. Wenn kein Arbeitsspeicher verfügbar ist, wird für die Abfrage festgelegt, dass sie auf eine RESOURCE_SEMAPHORE wartet, bis Arbeitsspeicher verfügbar ist. Wenn der Arbeitsspeicher nach mehr als 20 Minuten Wartezeit nicht verfügbar ist, beendet SQL Server die Abfrage mit dem Fehler 8645 " Beim Warten auf die Ausführung der Abfrage im Ressourcenpool "Standard" ist ein Timeout aufgetreten. Der Timeoutwert variiert zwischen den Versionen von SQL Server geringfügig. Der Timeoutwert wird möglicherweise auf Serverebene festgelegt, indem Sie in sys.dm_exec_query_memory_grants.timeout_sec

Ursache

Dieser Fehler kann in Bezug auf Speicherzuweisungen und längere Wartezeiten auf die Verfügbarkeit dieses Arbeitsspeichers angezeigt werden. Wenn eine Abfrage abgeschlossen ist, gibt sie in der Regel den von ihr genutzten Ausführungsspeicher frei. Wenn dieser Fehler angezeigt wird, bedeutet dies, dass die Timeoutabfrage mehr als 20 Minuten auf einige andere Anforderungen gewartet hat, um ihre Arbeit abzuschließen. Es kann nur eine einzelne Anforderung geben, die den gesamten verfügbaren QE-Arbeitsspeicher verbraucht hat, oder es kann viele Anforderungen geben, und zusammen haben ihre Speicherzuweisungen den QE-Arbeitsspeicher erschöpft. Wenn Ihre Workload über solche anforderungen mit langer Ausführungsdauer verfügt, müssen Sie Maßnahmen ergreifen, um die Ausführungsdauer zu verbessern und die Menge des verwendeten QE-Arbeitsspeichers zu verringern.

Benutzeraktion

Wenn Sie nicht Resource Governor verwenden, um den Arbeitsspeicherpool für bestimmte Workloads einzuschränken, können Sie den Gesamtzustand und die Workload des Servers überprüfen. Wenn Sie Resource Governor, überprüfen Sie die Einstellungen des Ressourcenpools oder der Arbeitsauslastungsgruppe.

Eine ausführliche Erläuterung und Problembehandlungsschritte finden Sie unter Behandeln von Problemen mit geringer Leistung oder geringem Arbeitsspeicher aufgrund von Arbeitsspeicherzuweisungen in SQL Server.

In der folgenden Liste sind die im oben genannten Artikel beschriebenen Schritte zusammengefasst. Diese Schritte können dazu beitragen, QE-Speicherfehler zu reduzieren oder zu beseitigen:

  1. Identifizieren Sie, welche Anforderungen in SQL Server die großen Speicherzuweisungen oder QE-Speicherverbraucher sind. Weitere Informationen finden Sie unter Identifizieren von Wartevorgängen für den Arbeitsspeicher für die Abfrageausführung.

  2. Schreiben Sie Abfragen um, um Sortier- und Hashvorgänge zu minimieren oder zu vermeiden.

  3. Aktualisieren Sie Statistiken, und halten Sie sie regelmäßig auf dem neuesten Stand, um sicherzustellen, dass SQL Server die Speicherzuweisung korrekt schätzt.

  4. Erstellen Sie geeignete Indizes für die identifizierte Abfrage oder Abfragen. Indizes können die große Anzahl der verarbeiteten Zeilen verringern, wodurch die JOIN-Algorithmen geändert und die Größe von Zuweisungen reduziert oder vollständig entfernt werden.

  5. Verwenden Sie nach Möglichkeit den OPTION-Hinweis (min_grant_percent = XX, max_grant_percent = XX) in Ihren Abfragen.

  6. Verwenden Sie Resource Governor, um die Auswirkungen der QE-Speicherauslastung nur auf eine bestimmte Workload zu beschränken.

  7. SQL Server 2017 und 2019 verwenden adaptive Abfrageverarbeitung, sodass der Feedbackmechanismus zur Speicherzuweisung die Größe der Speicherzuweisung zur Laufzeit dynamisch anpassen kann. Dieses Feature kann Probleme mit der Speicherzuweisung überhaupt verhindern.

  8. Erhöhen Sie SQL Server Arbeitsspeicher, oder passen Sie vorhandene Einstellungen an.

    1. Überprüfen Sie die folgenden SQL Server-Speicherkonfigurationsparameter:

      • Max. Serverarbeitsspeicher – bei Bedarf erhöhen
      • Min. Serverarbeitsspeicher
      • Min. Arbeitsspeicher pro Abfrage
    2. Achten Sie auf ungewöhnliche Einstellungen. Berichtigen Sie sie bei Bedarf. Konto für erhöhte Arbeitsspeicheranforderungen für SQL Server. Die Standardeinstellungen und die empfohlenen Einstellungen sind unter Konfigurationsoptionen für den Serverspeicher aufgeführt.

  9. Erhöhen Sie den Arbeitsspeicher auf Betriebssystemebene (physischer oder virtueller RAM).

  10. Überprüfen Sie, ob andere Anwendungen oder Dienste Arbeitsspeicher auf dem Server beanspruchen. Konfigurieren Sie weniger kritische Anwendungen oder Dienste neu, um weniger Arbeitsspeicher zu verbrauchen, oder verschieben Sie sie auf einen separaten Server. Durch diese Aktion kann der externe Arbeitsspeicherauslastung entfernt werden.

  11. Führen Sie die folgenden DBCC-Befehle aus, um mehrere SQL Server Arbeitsspeichercaches freizugeben – ein temporäres Measure.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE