Vorgänge, die einen Pufferpoolscan auslösen, können auf Computern mit großem Arbeitsspeicher langsam ausgeführt werden.
In diesem Artikel wird beschrieben, wie das Scannen des SQL Server-Pufferpools möglicherweise lange dauern kann, bis sie auf Computern mit großem Arbeitsspeicher abgeschlossen ist.
Gilt für: SQL Server
Ursprüngliche KB-Nummer: 4566579
Problembeschreibung
Bestimmte Vorgänge in Microsoft SQL Server lösen einen Scan des Pufferpools aus. (Dies ist der Cache, der Datenbankseiten im Arbeitsspeicher speichert.) Auf Systemen mit umfangreichem Arbeitsspeicher (1 TB Arbeitsspeicher oder mehr) kann das Scannen des Pufferpools sehr lange dauern. Dadurch wird der Vorgang verlangsamt, der den Scan ausgelöst hat.
Vorgänge, die einen Pufferpoolscan verursachen
Nachfolgend finden Sie einige Vorgänge, die einen Pufferpoolscan auslösen können:
- Datenbankstart
- Herunterfahren oder Neustart der Datenbank
- AG-Failover
- Entfernen der Datenbank (Drop)
- Dateientfernung aus einer Datenbank
- Vollständige oder differenzielle Datenbanksicherung
- Datenbankwiederherstellung
- Wiederherstellung des Transaktionsprotokolls
- Onlinewiederherstellung
DBCC CHECKDB
oderDBCC CHECKTABLE
Vorgang
Fehlerprotokoll zeigt, dass eine Überprüfung lange dauerte
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 lange dauerte (10 Sekunden oder länger):
Der Pufferpoolscan dauerte 14 Sekunden: Datenbank-ID 7, Befehl 'BACKUP DATABASE', Vorgang 'FlushCache', gescannte Puffer 115, gesamt iterierte Puffer 204640239, Wartezeit 0 ms. Weitere Informationen finden Sie unter „https://go.microsoft.com/fwlink/?linkid=2132602“.
Erweitertes Ereignis zum Diagnostizieren eines langen Scans
Außerdem wurde ab denselben Builds SQL Server 2016 SP3, SQL Server 2017 CU23 und SQL Server 2019 CU9 das buffer_pool_scan_complete Extended-Ereignis eingeführt, um lange Pufferpoolscans zu identifizieren.
Wenn ein Scan mehr als 1 Sekunde dauert, wird das XEvent wie folgt aufgezeichnet, wenn das Ereignis aktiviert ist.
Name | database_id | elapsed_time_ms | Befehl | operation | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1308 | BACKUP DATABASE | FlushCache | 243 | 19932814 |
Notiz
Der Schwellenwert ist im XEvent kleiner, damit Sie Informationen in einer feineren 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 auszuführen, um den Pufferpool zu löschen, da saubere Puffer (DBCC DROPCLEANBUFFERS) aus dem Pufferpool gelöscht werden, was zu einer erheblichen Leistungsbeeinträchtigung führen kann. Durch das Entfernen von Datenbankseiten aus dem Arbeitsspeicher werden nachfolgende Abfrageausführungen dazu führen, die Daten aus den Datenbankdateien auf dem Datenträger erneut zu lesen. Dieser Vorgang des Zugriffs auf Daten über Datenträger-E/A bewirkt, dass Abfragen langsam sind.
In SQL Server 2022 wird dieses Problem gemildert, da Pufferpoolscans durch Verwendung mehrerer Kerne parallelisiert werden. Es wird eine Aufgabe pro 8 Millionen Puffer (64 GB) geben, bei denen ein serieller Scan weiterhin verwendet wird, wenn weniger als 8 Millionen Puffer vorhanden sind. Weitere Informationen finden Sie im Parallelscan des Pufferpools.
Weitere Informationen
Weitere Informationen zu Problemen, die in großen Pufferpools auftreten können, finden Sie unter SQL Server: large RAM und DB Checkpointing.