Åtgärder som utlöser en buffertpoolsgenomsökning kan köras långsamt på datorer med stort minne
Den här artikeln beskriver hur det kan ta lång tid att skanna SQL Server buffertpool på datorer med stort minne.
Gäller för: SQL Server
Ursprungligt KB-nummer: 4566579
Symptom
Vissa åtgärder i Microsoft SQL Server utlösa en genomsökning av buffertpoolen (cacheminnet 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 saktar ned åtgärden som utlöste genomsökningen.
Åtgärder som orsakar en buffertpoolsgenomsökning
Här följer några åtgärder som kan utlösa en genomsökning av buffertpoolen:
- Databasstart
- Databasavstängning eller omstart
- Redundansväxling av tillgänglighetsgrupp
- Borttagning av databas (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 SQL Server 2016 SP3, SQL Server 2017 CU23 och SQL Server 2019 CU9 introducerades 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 på följande sätt när händelsen är aktiverad.
Namn | database_id | elapsed_time_ms | kommando` | Drift | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1308 | SÄKERHETSKOPIERINGSDATABAS | FlushCache | 243 | 19932814 |
Obs!
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 för att komma åt data via disk-I/O gör att frågor blir långsamma.
I SQL Server 2022 åtgärdas det här problemet eftersom buffertpoolsgenomsökningar parallelliseras med hjälp av flera kärnor. Det kommer att finnas en uppgift 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 watch 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.