Pool de Buffers Híbrido

Aplica-se a: SQL Server (todas as versões com suporte)

O pool de buffers híbrido permite que objetos do pool de buffers façam referência a páginas de dados em arquivos de banco de dados que residem em dispositivos PMEM (memória persistente), em vez de precisar efetuar fetch de cópias das páginas de dados do disco e armazená-las em cache na DRAM volátil. Esse recurso foi introduzido no SQL Server 2019 (15.x) e foi aprimorado ainda mais no SQL Server 2022 (16.x).

Pool de Buffers Híbrido

Os dispositivos de memória persistente (PMEM) são endereçáveis por byte e se um sistema de arquivos com reconhecimento de memória persistente do DAX (acesso direto) (como XFS, EXT4 ou NTFS) for usado, os arquivos no sistema de arquivos poderão ser acessados usando as APIs de sistema de arquivos usuais no sistema de arquivos. Como alternativa, o SQL Server pode executar o que é conhecido como operações de carregamento e armazenamento em relação aos mapas de memória dos arquivos no dispositivo PMEM. Isso permite que aplicativos de reconhecimento de PMEM, como SQL Server, acessem arquivos no dispositivo sem atravessar a pilha de armazenamento tradicional.

O pool de buffers híbrido usa essa capacidade de execução de operações de carregamento e armazenamento em arquivos mapeados de memória, para aproveitar o dispositivo PMEM como um cache para o pool de buffers e um local de armazenamento para os arquivos de banco de dados. Isso cria a situação única em que uma leitura lógica e uma leitura física se tornam essencialmente a mesma operação. Os dispositivos de memória persistentes podem ser acessados por meio do barramento de memória, assim como a DRAM volátil normal.

Por padrão, somente as páginas de dados limpas são armazenadas em cache no módulo PMEM para o pool de buffers híbrido. Para que uma página seja modificada e marcada como suja, ela deve ser copiada do dispositivo PMEM para um pool de buffers DRAM, modificada e, eventualmente, uma cópia da página modificada é gravada do DRAM de volta no módulo PMEM, momento em que ela pode ser marcada como limpa novamente. Esse processo ocorre usando operações normais em segundo plano, como ponto de verificação ou gravador lento, como se o módulo PMEM fosse um dispositivo de bloco padrão.

O recurso de pool de buffers híbrido está disponível para o Windows e o Linux. O dispositivo PMEM precisa usar um sistema de arquivos que dá suporte ao DAX (DirectAccess). Os sistemas de arquivos XFS, EXT4 e NTFS têm suporte para extensões DAX, que fornecem acesso ao sistema de arquivos diretamente do espaço do usuário. O SQL Server detectará se arquivos de dados de qualquer banco de dados residirem em um dispositivo de disco PMEM corretamente configurado e executará automaticamente o mapeamento de memória necessário dos arquivos de banco de dados após a inicialização do banco de dados ou sempre que um banco de dados for anexado, restaurado ou criado.

Para obter mais informações, consulte:

Habilitar o pool de buffers híbrido

O SQL Server 2019 (15.x) introduz a DDL (Dynamic Data Language) para controlar o pool de buffers híbrido.

O seguinte exemplo habilita o pool de buffers híbrido em uma instância do SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

Por padrão, o pool de buffers híbrido é desabilitado no escopo da instância. Observe que, para a alteração de configuração entrem em vigor, a instância do SQL Server deve ser reiniciada. Uma reinicialização é necessária para facilitar a alocação de páginas suficientes de hash para levar em conta a capacidade total de PMEM no servidor.

O exemplo a seguir habilita o pool de buffers híbrido em um banco de dados específico.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

Por padrão, o pool de buffers híbrido está habilitado no escopo do banco de dados.

Desabilitar o pool de buffers híbrido

O exemplo seguinte desabilita o pool de buffers híbrido no nível da instância:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

Por padrão, o pool de buffers híbrido é desabilitado no nível da instância. Para que essa alteração entre em vigor, a instância deve ser reiniciada. Esse reinício garante que páginas de hash suficientes sejam alocadas para o pool de buffers, já que a capacidade da PMEM no servidor agora precisa ser considerada.

O exemplo a seguir desabilita o pool de buffers híbrido em um banco de dados específico.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

Por padrão, o pool de buffers híbrido está habilitado no escopo do banco de dados.

Exibir a configuração do pool de buffers híbrido

O exemplo a seguir retorna o status atual da configuração pool de buffers híbrido da instância.

SELECT * FROM
sys.server_memory_optimized_hybrid_buffer_pool_configuration;

O exemplo a seguir lista os bancos de dados e a configuração no nível de banco de dados para o pool de buffers híbrido (is_memory_optimized_enabled).

SELECT name, is_memory_optimized_enabled FROM sys.databases;

Pool de buffers híbrido com gravação direta

O pool de buffers híbrido com o comportamento Direct Write reduz o número de comandos memcpy que precisam ser executados em páginas de índice ou dados modificados que residem em dispositivos PMEM. Ele faz isso aproveitando o buffer de log persistente durável como um meio de modificar a página sem precisar copiá-la para um dos pools de buffers DRAM. Em vez disso, as páginas em arquivos de banco de dados que residem em dispositivos PMEM são modificadas diretamente sem a necessidade de armazenar em cache em um pool de buffers DRAM e posteriormente realizar posteriormente a liberação assíncrona em disco. Esse comportamento ainda respeita a semântica WAL (log write-ahead), já que os registros (log) no buffer de log de transações persistentes foram gravados ou protegidos em mídia durável. Ganhos consideráveis de desempenho foram observados para cargas de trabalho transacionais usando o pool de buffers híbrido e o buffer de log persistente juntos dessa maneira.

Para habilitar o modo de gravação direta, habilite o pool de buffers híbrido e o buffer de log persistente para um banco de dados e habilite o sinalizador de rastreamento de inicialização 809.

Melhores práticas para o pool de buffers híbrido

  • Ao formatar seu dispositivo PMEM no Windows, use o maior tamanho de unidade de alocação disponível para NTFS (2 MB no Windows Server 2019 e posterior) e verifique se o dispositivo foi formatado para o DAX (acesso direto).

  • Usar Páginas bloqueadas na memória no Windows.

  • Os tamanhos de arquivos devem ser um múltiplo de 2 MB (2 MB de módulo deve igual a zero).

  • Se a configuração com escopo do servidor para o pool de buffers híbrido for desabilitada, o recurso não será usado por nenhum banco de dados de usuário.

  • Se a configuração com escopo do servidor para o pool de buffers híbrido estiver habilitada, você poderá usar a configuração com escopo do banco de dados para desabilitar o recurso para bancos de dados de usuário individuais.

  • Ao usar o Buffer de Log Persistente, considere habilitar o rastreamento de inicialização de sinalizador 809 para reduzir a sobrecarga da CPU e aprimorar o desempenho geral. Especialmente se a carga de trabalho for altamente transacional, envolvendo várias modificações de página de índice e dados.

  • Do KB4538118 em diante, o cache de leitura é habilitado por padrão, com as páginas mais acessadas no pool de buffers híbrido automaticamente promovidas a um pool de buffers DRAM para aprimorar o desempenho.