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 auf den Abfrageausführungsspeicher (QE) für einen längeren Zeitraum gewartet hat und arbeitsspeicher nicht verfügbar war. Der Abfrageausführungsspeicher wird in erster Linie für Sortiervorgänge, Hashvorgänge, Massenkopienvorgänge und Indexerstellung und -population verwendet. Eine Abfrage, die einen dieser Vorgänge ausführt, fordert eine Speichererteilung an. Wenn kein Arbeitsspeicher verfügbar ist, wird die Abfrage so eingestellt, dass sie auf eine RESOURCE_SEMAPHORE wartet, bis der 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 Speicherressourcen auf die Ausführung der Abfrage im Ressourcenpool "Standard" ist ein Timeout aufgetreten. Der Timeoutwert variiert geringfügig zwischen sql Server-Versionen. Möglicherweise wird der auf Serverebene festgelegte Timeoutwert in sys.dm_exec_query_memory_grants angezeigttimeout_sec
.
Ursache
Dieser Fehler kann in Bezug auf Speichererteilungen und längere Wartezeiten auf den verfügbaren Speicher angezeigt werden. In der Regel, wenn eine Abfrage abgeschlossen ist, wird der von ihr verwendete Ausführungsspeicher freigegeben. Wenn dieser Fehler angezeigt wird, bedeutet dies, dass die Timeoutabfrage mehr als 20 Minuten lang auf einige andere Anforderungen gewartet hat, um ihre Arbeit abzuschließen. Es kann nur eine einzige Anforderung geben, die den gesamten verfügbaren QE-Speicher verbraucht hat, oder es könnten viele Anforderungen vorhanden sein, und ihre Speichererteilungen haben den QE-Speicher erschöpft. Wenn Sie solche anforderungen mit langer Ausführung in Ihrer Workload haben, müssen Sie Maßnahmen ergreifen, um die Ausführungsdauer zu verbessern und die Menge des verwendeten QE-Speichers zu verringern.
Aktion des Benutzers
Wenn Sie den Ressourcengouverneur nicht verwenden, um den Speicherpool für bestimmte Workloads einzuschränken, können Sie den gesamten Serverstatus und die Arbeitsauslastung überprüfen. Wenn Sie die Ressourcenkontrolle verwenden, überprüfen Sie die Ressourcenpool- oder Workloadgruppeneinstellungen.
Eine ausführliche Erläuterung und Problembehandlungsschritte werden in der Problembehandlung bei langsamen Oder geringen Arbeitsspeicherproblemen behandelt, die durch Arbeitsspeichererteilungen in SQL Server verursacht werden.
In der folgenden Liste sind die im oben genannten Artikel beschriebenen Schritte zusammengefasst. Mit diesen Schritten können Sie QE-Speicherfehler reduzieren oder beseitigen:
Ermitteln Sie, welche Anforderungen in SQL Server die große Speichererteilung oder QE-Speicherverbraucher sind. Weitere Informationen finden Sie unter Identifizieren von Wartezeiten für den Abfrageausführungsspeicher.
Schreiben Sie Abfragen neu, um Sortier- und Hashvorgänge zu minimieren oder zu vermeiden.
Aktualisieren Sie Statistiken, und halten Sie sie regelmäßig auf dem neuesten Stand, um sicherzustellen, dass SQL Server die Speicherzuteilung korrekt schätzt.
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 Zuschüssen reduziert oder vollständig eliminiert wird.
Verwenden Sie den HINWEIS OPTION (min_grant_percent = XX, max_grant_percent = XX) in Ihren Abfragen, sofern möglich.
Verwenden Sie den Ressourcengouverneur, um die Auswirkungen der QE-Speicherauslastung nur auf eine bestimmte Workload zu beschränken.
SQL Server 2017 und 2019 verwenden adaptive Abfrageverarbeitung, sodass der Speicherzuteilungs-Feedbackmechanismus die Größe der Speichererteilung dynamisch zur Laufzeit anpassen kann. Dieses Feature kann Probleme mit der Speichererteilung an erster Stelle verhindern.
Erhöhen Sie den SQL Server-Arbeitsspeicher, oder passen Sie vorhandene Einstellungen an.
Überprüfen Sie die folgenden SQL Server-Speicherkonfigurationsparameter:
- max. Serverspeicher – bei Bedarf vergrößern
- Min. Serverarbeitsspeicher
- Min. Arbeitsspeicher pro Abfrage
Achten Sie auf ungewöhnliche Einstellungen. Berichtigen Sie sie bei Bedarf. Berücksichtigen Sie erhöhte Speicheranforderungen für SQL Server. Standardeinstellungen und empfohlene Einstellungen werden in den Serverspeicherkonfigurationsoptionen aufgeführt.
Erhöhen Sie den Arbeitsspeicher auf Betriebssystemebene (physischer oder virtueller RAM).
Ü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 auf einen separaten Server zu verschieben. Diese Aktion kann den Druck des externen Arbeitsspeichers entfernen.
Führen Sie die folgenden DBCC-Befehle aus, um mehrere SQL Server-Speichercaches freizugeben – ein temporäres Measure.
- DBCC FREESYSTEMCACHE
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE