Vorgänge, die eine Pufferpoolüberprüfung auslösen, können auf Computern mit großem Arbeitsspeicher langsam ausgeführt werden.
In diesem Artikel wird beschrieben, wie das Überprüfen des SQL Server Pufferpools auf Computern mit großem Arbeitsspeicher sehr lange dauern kann.
Gilt für: SQL Server
Ursprüngliche KB-Nummer: 4566579
Symptome
Bestimmte Vorgänge in Microsoft SQL Server eine Überprüfung des Pufferpools (des Caches, der Datenbankseiten im Arbeitsspeicher speichert) auslösen. Auf Systemen mit einer großen Ram-Menge (1 TB Arbeitsspeicher oder mehr) kann das Überprüfen des Pufferpools sehr lange dauern. Dadurch wird der Vorgang verlangsamt, der die Überprüfung ausgelöst hat.
Vorgänge, die eine Pufferpoolüberprüfung verursachen
Im Folgenden finden Sie einige Vorgänge, die eine Pufferpoolüberprüfung auslösen können:
- Datenbankstart
- Herunterfahren oder Neustarten der Datenbank
- Failover der Verfügbarkeitsgruppe
- Datenbankentfernung (Löschen)
- Entfernen von Dateien aus einer Datenbank
- Vollständige oder differenzielle Datenbanksicherung
- Datenbankwiederherstellung
- Wiederherstellung des Transaktionsprotokolls
- Online-Wiederherstellung
-
DBCC CHECKDB
- oderDBCC CHECKTABLE
-Vorgang
Fehlerprotokoll zeigt an, dass eine Überprüfung sehr lange gedauert hat
Ab SQL Server 2016 SP3, SQL Server 2017 CU23 und SQL Server 2019 CU9 wurde dem SQL Server Fehlerprotokoll eine Fehlermeldung hinzugefügt, um anzugeben, dass ein Pufferpoolscan sehr lange dauerte (10 Sekunden oder länger):
Die Überprüfung des Pufferpools hat 14 Sekunden gedauert: Datenbank-ID 7, Befehl "BACKUP DATABASE", Vorgang "FlushCache", gescannte Puffer 115, gesamte iterierte Puffer 204640239, Wartezeit 0 ms. Weitere Informationen finden Sie unter "https://go.microsoft.com/fwlink/?linkid=2132602".
Erweitertes Ereignis zur Diagnose einer langen Überprüfung
Außerdem wurde ab den gleichen Builds SQL Server 2016 SP3, SQL Server 2017 CU23 und SQL Server 2019 CU9 das buffer_pool_scan_complete Extended-Ereignis eingeführt, um Sie bei der Identifizierung langer Pufferpoolscans zu unterstützen.
Wenn eine Überprüfung länger als 1 Sekunde dauert, wird das XEvent wie folgt aufgezeichnet, wenn das Ereignis aktiviert ist.
name | Database_id | elapsed_time_ms | Befehl | Vorgang | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1308 | BACKUP DATABASE | FlushCache | 243 | 19932814 |
Hinweis
Der Schwellenwert im XEvent ist kleiner, damit Sie Informationen mit einer genaueren Granularität erfassen können.
Problemumgehung
Vor SQL Server 2022 gab es keine Möglichkeit, dieses Problem zu beseitigen. Es wird nicht empfohlen, eine Aktion zum Löschen des Pufferpools auszuführen, da das Löschen sauber Puffer (DBCC DROPCLEANBUFFERS) aus dem Pufferpool zu einer erheblichen Leistungsbeeinträchtigung führen kann. Das Entfernen von Datenbankseiten aus dem Arbeitsspeicher führt dazu, dass nachfolgende Abfrageausführungen die Daten aus den Datenbankdateien auf dem Datenträger erneut lesen. Dieser Vorgang des Datenzugriffs über Datenträger-E/A führt dazu, dass Abfragen langsam sind.
In SQL Server 2022 wird dieses Problem behoben, da Pufferpoolscans mithilfe mehrerer Kerne parallelisiert werden. Es gibt einen Task pro 8 Millionen Puffer (64 GB), bei dem ein serieller Scan weiterhin verwendet wird, wenn weniger als 8 Millionen Puffer vorhanden sind. Weitere Informationen watch Parallelscan des Pufferpools.
Weitere Informationen
Weitere Informationen zu Problemen, die in großen Pufferpools auftreten können, finden Sie unter SQL Server: Großer RAM und Db-Prüfpunkt.