As operações que disparam uma verificação 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 SQL Server pode levar muito tempo para ser concluída em computadores de memória grande.

Aplica-se ao: SQL Server
Número de KB original: 4566579

Sintomas

Determinadas operações na Microsoft SQL Server disparar 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 maior), a verificação do pool de buffers pode levar muito tempo. Isso atrasa a operação que desencadeou a verificação.

Operações que causam uma verificação do pool de buffers

Aqui estão algumas operações que podem disparar uma verificação do pool de buffers para ocorrer:

  • Inicialização de banco de dados
  • Desligamento ou reinicialização do banco de dados
  • Failover do AG
  • Remoção de banco de dados (drop)
  • Remoção de arquivos de um banco de dados
  • Backup de banco de dados completo ou diferencial
  • Restauração do banco de dados
  • Restauração do log de transações
  • Restauração online
  • DBCC CHECKDB ou DBCC CHECKTABLE operação

O log de erros mostra que uma verificação demorou muito tempo

Começando com SQL Server 2016 SP3, SQL Server CU23 2017 e SQL Server 2019 CU9, uma mensagem de erro foi adicionada ao log de erro SQL Server para indicar que uma verificação do pool de buffers levou muito tempo (10 segundos ou mais):

A verificação do Pool de Buffers 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 0 ms. Consulte 'https://go.microsoft.com/fwlink/?linkid=2132602' para obter mais informações.

Evento Estendido para diagnosticar uma verificação longa

Além disso, começando com os mesmos builds SQL Server 2016 SP3, SQL Server CU23 2017 e SQL Server 2019 CU9, o evento buffer_pool_scan_complete Extended foi introduzido para ajudar você a identificar verificações de pool de buffers longos.

Se uma verificação levar mais de 1 segundo, o XEvent será registrado da seguinte maneira quando o evento estiver habilitado.

nome Database_id elapsed_time_ms Comando Operação scanned_buffers total_iterated_buffers
buffer_pool_scan_complete 7 1308 BANCO DE DADOS DE BACKUP FlushCache 243 19932814

Observação

O limite está no XEvent é menor para permitir que você capture informações em uma granularidade mais fina.

Solução alternativa

Antes de 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 a remoção limpo buffers (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 execuções de consulta subsequentes reliam os dados dos arquivos de banco de dados em disco. Esse processo de acesso aos dados por meio da E/S do disco faz com que as consultas sejam lentas.

Em SQL Server 2022, esse problema é atenuado porque as verificações do pool de buffer são paralelizadas utilizando vários núcleos. Haverá uma tarefa por 8 milhões de buffers (64 GB) em que uma verificação serial ainda será usada se houver menos de 8 milhões de buffers. Para obter mais informações, watch 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 DB.