As operações que acionam uma varredura do pool de buffers podem ser executadas lentamente em computadores de memória grande
Este artigo descreve como a verificação do pool de buffers do SQL Server pode levar muito tempo para ser concluída em computadores com memória grande.
Aplica-se a: SQL Server
Número original do KB: 4566579
Sintomas
Determinadas operações no Microsoft SQL Server disparam uma verificação do pool de buffers (o cache que armazena páginas de banco de dados na memória). Em sistemas que têm uma grande quantidade de RAM (1 TB de memória ou superior), a verificação do pool de buffers pode levar muito tempo. Isso reduz a operação que disparou a verificação.
Operações que causam uma varredura do buffer pool
Aqui estão algumas operações que podem acionar a ocorrência de uma varredura do pool de buffers:
- Inicialização do banco de dados
- Encerramento ou reinicialização do banco de dados
- Failover de AG
- Remoção de banco de dados (descartar)
- Remoção de arquivo de um banco de dados
- Backup de banco de dados completo ou diferencial
- Restauração de banco de dados
- Restauração do log de transações
- Restauração online
DBCC CHECKDB
ouDBCC CHECKTABLE
operação
O log de erros mostra que uma verificação demorou muito tempo
A partir do SQL Server 2016 SP3, SQL Server 2017 CU23 e SQL Server 2019 CU9, uma mensagem de erro foi adicionada ao log de erros do SQL Server para indicar que uma verificação do pool de buffers demorou muito (10 segundos ou mais):
A verificação do Buffer Pool levou 14 segundos: ID do banco de dados 7, comando 'BACKUP DATABASE', operação 'FlushCache', buffers verificados 115, buffers iterados totais 204640239, tempo de espera de 0 ms. Consulte “https://go.microsoft.com/fwlink/?linkid=2132602” para obter mais informações.
Evento estendido para diagnosticar uma varredura longa
Além disso, começando com as mesmas compilações SQL Server 2016 SP3, SQL Server 2017 CU23 e SQL Server 2019 CU9, o evento buffer_pool_scan_complete Extended foi introduzido para ajudá-lo a identificar verificações longas do pool de buffers.
Se uma varredura demorar mais de 1 segundo, o XEvent será gravado da seguinte forma quando o evento for ativado.
name | database_id | elapsed_time_ms | command | operation | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1.308 | BACKUP DO BANCO DE DADOS | FlushCache | 243 | 19932814 |
Observação
O limite no XEvent é menor para permitir que você capture informações em uma granularidade mais fina.
Solução alternativa
Antes do SQL Server 2022, não havia como eliminar esse problema. Não é recomendável executar nenhuma ação para limpar o pool de buffers, pois descartar buffers limpos (DBCC DROPCLEANBUFFERS) do pool de buffers pode resultar em uma degradação significativa do desempenho. A remoção de páginas de banco de dados da memória fará com que as execuções de consulta subsequentes releiam os dados dos arquivos de banco de dados no disco. Esse processo de acesso a dados por meio de E/S de disco faz com que as consultas sejam lentas.
No SQL Server 2022, esse problema é atenuado porque as verificações do pool de buffers são paralelizadas utilizando vários núcleos. Haverá uma tarefa por 8 milhões de buffers (64 GB) em que uma varredura serial ainda será usada se houver menos de 8 milhões de buffers. Para obter mais informações, assista Verificação paralela do pool de buffers.
Mais informações
Para obter mais informações sobre problemas que podem ocorrer em grandes pools de buffers, consulte SQL Server: RAM grande e ponto de verificação de banco de dados.