Å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 eller DBCC 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.