Åtgärder som utlöser en buffertpoolsökning kan köras långsamt på datorer med stort minne
I den här artikeln beskrivs hur det kan ta lång tid att skanna SQL Server-buffertpoolen på datorer med stort minne.
Gäller för: SQL Server
Ursprungligt KB-nummer: 4566579
Symptom
Vissa åtgärder i Microsoft SQL Server utlöser en genomsökning av buffertpoolen (cachen som lagrar databassidor i minnet). På system som har en stor mängd RAM-minne (1 TB minne eller mer) kan det ta lång tid att skanna buffertpoolen. Detta gör åtgärden som utlöste genomsökningen långsammare.
Åtgärder som orsakar en buffertpoolsgenomsökning
Här följer några åtgärder som kan utlösa en buffertpoolsgenomsökning:
- Databasstart
- Databasavstängning eller omstart
- Ag-redundans
- Databasborttagning (släpp)
- Filborttagning från en databas
- Fullständig eller differentiell databassäkerhetskopiering
- Databasåterställning
- Återställning av transaktionslogg
- Onlineåterställning
DBCC CHECKDB
ellerDBCC CHECKTABLE
åtgärd
Felloggen visar att en genomsökning tog lång tid
Från och med SQL Server 2016 SP3, SQL Server 2017 CU23 och SQL Server 2019 CU9 lades ett felmeddelande till i SQL Server-felloggen för att indikera att en buffertpoolsökning tog lång tid (10 sekunder eller längre):
Genomsökningen av buffertpoolen tog 14 sekunder: databas-ID 7, kommandot "BACKUP DATABASE", åtgärden "FlushCache", skannade buffertar 115, totalt itererade buffertar 204640239, väntetid 0 ms. Mer information finns i "https://go.microsoft.com/fwlink/?linkid=2132602".
Utökad händelse för att diagnostisera en lång genomsökning
Från och med samma versioner av SQL Server 2016 SP3, SQL Server 2017 CU23 och SQL Server 2019 CU9 introducerades den buffer_pool_scan_complete Extended-händelsen för att hjälpa dig att identifiera långa buffertpoolsgenomsökningar.
Om en genomsökning tar mer än 1 sekund registreras XEvent enligt följande när händelsen är aktiverad.
name | database_id | elapsed_time_ms | kommando | operation | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1308 | SÄKERHETSKOPIERINGSDATABAS | FlushCache | 243 | 19932814 |
Kommentar
Tröskelvärdet är i XEvent är mindre så att du kan samla in information med en finare kornighet.
Lösning
Före SQL Server 2022 fanns det inget sätt att eliminera det här problemet. Vi rekommenderar inte att du utför någon åtgärd för att rensa buffertpoolen eftersom borttagning av rena buffertar (DBCC DROPCLEANBUFFERS) från buffertpoolen kan leda till en betydande prestandaförsämring. Om du tar bort databassidor från minnet kan efterföljande frågekörningar läsa om data från databasfilerna på disken. Den här processen med att komma åt data via disk-I/O gör att frågorna blir långsamma.
I SQL Server 2022 minimeras det här problemet eftersom buffertpoolsgenomsökningar parallelliseras med hjälp av flera kärnor. Det kommer att finnas en aktivitet per 8 miljoner buffertar (64 GB) där en seriell genomsökning fortfarande används om det finns mindre än 8 miljoner buffertar. Mer information finns i Parallell genomsökning av buffertpool.
Mer information
Mer information om problem som kan uppstå i stora buffertpooler finns i SQL Server : stor RAM- och DB-kontrollpunkt.