Bewerkingen die een scan van een buffergroep activeren, kunnen langzaam worden uitgevoerd op computers met een groot geheugen
In dit artikel wordt beschreven hoe het scannen van de SQL Server buffergroep lang kan duren op computers met een groot geheugen.
Van toepassing op: SQL Server
Origineel KB-nummer: 4566579
Symptomen
Bepaalde bewerkingen in Microsoft SQL Server een scan van de buffergroep (de cache waarin databasepagina's in het geheugen worden opgeslagen). Op systemen met een grote hoeveelheid RAM (1 TB geheugen of meer) kan het scannen van de buffergroep lang duren. Dit vertraagt de bewerking die de scan heeft geactiveerd.
Bewerkingen die een bufferpoolscan veroorzaken
Hier volgen enkele bewerkingen die een bufferpoolscan kunnen activeren:
- Database opstarten
- Database afsluiten of opnieuw opstarten
- AG-failover
- Database verwijderen (verwijderen)
- Bestand verwijderen uit een database
- Volledige of differentiële databaseback-up
- Databaseherstel
- Herstel van transactielogboek
- Online herstel
-
DBCC CHECKDB
ofDBCC CHECKTABLE
bewerking
Foutenlogboek toont aan dat een scan lang heeft geduurd
Vanaf SQL Server 2016 SP3, SQL Server 2017 CU23 en SQL Server 2019 CU9, is er een foutbericht toegevoegd aan het SQL Server Foutenlogboek om aan te geven dat een scan van een buffergroep lang heeft geduurd (10 seconden of langer):
De scan van de buffergroep duurde 14 seconden: database-id 7, opdracht 'BACKUP DATABASE', bewerking 'FlushCache', gescande buffers 115, totaal aantal getimede buffers 204640239, wachttijd 0 ms. Zie 'https://go.microsoft.com/fwlink/?linkid=2132602' voor meer informatie.
Uitgebreide gebeurtenis om een lange scan te diagnosticeren
Vanaf dezelfde builds SQL Server 2016 SP3, SQL Server 2017 CU23 en SQL Server 2019 CU9 is de gebeurtenis buffer_pool_scan_complete Extended geïntroduceerd om u te helpen bij het identificeren van scans van lange bufferpools.
Als een scan langer dan 1 seconde duurt, wordt de XEvent als volgt vastgelegd wanneer de gebeurtenis wordt ingeschakeld.
Naam | database_id | elapsed_time_ms | opdracht | Bewerking | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1308 | BACK-UPDATABASE | FlushCache | 243 | 19932814 |
Opmerking
De drempelwaarde in de XEvent is kleiner, zodat u informatie met een fijnere granulariteit kunt vastleggen.
Tijdelijke oplossing
Vóór SQL Server 2022 was er geen manier om dit probleem op te lossen. Het wordt niet aanbevolen om een actie uit te voeren om de buffergroep te wissen, omdat het verwijderen van schone buffers (DBCC DROPCLEANBUFFERS) uit de buffergroep kan leiden tot een aanzienlijke prestatievermindering. Als u databasepagina's uit het geheugen verwijdert, worden de gegevens uit de databasebestanden op de schijf opnieuw gelezen. Dit proces voor toegang tot gegevens via schijf-I/O zorgt ervoor dat query's traag zijn.
In SQL Server 2022 wordt dit probleem opgelost omdat bufferpoolscans worden geparallelliseerd door gebruik te maken van meerdere kernen. Er is één taak per 8 miljoen buffers (64 GB) waarbij een seriële scan nog steeds wordt gebruikt als er minder dan 8 miljoen buffers zijn. Voor meer informatie watch Parallelle scan van bufferpools.
Meer informatie
Zie SQL Server: grote RAM- en DB-controlepunten voor meer informatie over problemen die kunnen optreden in grote buffergroepen.