Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
Symptomer
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 saktar ner å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 buffertpoolsgenomsökning:
- Uppstart av databasen
- Databasavstängning eller omstart
- AG-failöver
- Borttagning av databas (radera)
- Filborttagning från en databas
- Fullständig eller differentiell databassäkerhetskopiering
- Databasåterställning
- Återställning av transaktionslogg
- Onlineåterställning
- 
              DBCC CHECKDBellerDBCC 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 CU9introducerades 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.
| namn | database_id | förfluten_tid_ms | kommando | operation | scanned_buffers | totalt_itererade_buffertar | 
|---|---|---|---|---|---|---|
| buffertpool_skannad_klar | 7 | 1308 | SÄKERHETSKOPIERINGSDATABAS | FlushCache | 243 | 19932814 | 
Anteckning
Tröskelvärdet i XEvent är mindre så att du kan samla in information med en finare kornighet.
Omgångslö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. För mer information, se Parallell genomsökning av buffertpoolen.
Mer information
Mer information om problem som kan uppstå i stora buffertpooler finns i SQL Server : stor RAM- och DB-kontrollpunkt.