Partilhar via


Pool de buffer híbrido

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores

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

Diagrama mostrando o pool de buffers, com e sem o pool de buffers híbrido habilitado.

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

O pool de buffer híbrido usa essa capacidade para executar operações de carregamento e armazenamento em arquivos mapeados de memória, para usar 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 persistente são acessíveis através do barramento de memória, tal como a DRAM volátil normal.

Por padrão, apenas páginas de dados limpos são armazenadas em cache no módulo PMEM para o pool de buffer 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 da DRAM de volta para o módulo PMEM, momento em que pode ser marcada como limpa novamente. Este processo ocorre usando operações normais em segundo plano, como o ponto de verificação ou o gravador preguiçoso, como se o módulo PMEM fosse um dispositivo de bloco padrão.

O recurso de pool de buffer híbrido está disponível para Windows e Linux. O dispositivo PMEM deve usar um sistema de arquivos que suporte DAX (DirectAccess). XFS, EXT4 e os sistemas de arquivos NTFS têm suporte para extensões DAX, que fornece acesso ao sistema de arquivos diretamente do espaço do usuário. O SQL Server detetará se algum arquivo de dados de banco de dados reside em um dispositivo de disco PMEM configurado adequadamente e executará automaticamente o mapeamento de memória necessário dos arquivos de banco de dados na 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 pool de buffer híbrido

O SQL Server 2019 (15.x) introduz a linguagem de dados dinâmica (DDL) para controlar o pool de buffers híbridos.

O exemplo a seguir habilita o pool de buffer híbrido para uma instância do SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

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

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

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

Por padrão, o pool de buffer híbrido é habilitado no escopo do banco de dados.

Desabilitar pool de buffer híbrido

O exemplo a seguir desabilita o pool de buffer híbrido no nível da instância:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

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

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

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

Por padrão, o pool de buffers híbrido é habilitado no escopo do banco de dados e desabilitado no escopo do servidor.

Exibir configuração do pool de buffer híbrido

Mostrar valor de tempo de execução

O exemplo a seguir retorna o status atual de configuração do pool de buffer 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 de nível de banco de dados para o pool de buffer híbrido (is_memory_optimized_enabled).

Você também pode montar ou formatar o módulo PMEM sem DAX habilitado e tratá-lo como um dispositivo de bloco regular (ou seja, executar E/S através do kernel). Quando configurado dessa forma, nenhum módulo PMEM pode ser usado pelo SQL Server para executar operações endereçáveis por bytes (ou seja, todas as chamadas usarão drivers de espaço kernel).

SELECT name, is_memory_optimized_enabled
FROM sys.databases;

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

O pool de buffer híbrido com comportamento Direct Write reduz o número de comandos que precisam ser executados em dados modificados ou páginas de memcpy índice residentes em dispositivos PMEM. Ele faz isso usando o buffer de log persistente durável como um meio de modificar a página sem ter que copiá-la para um dos pools de buffer 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, liberadas de forma assíncrona para o disco. Esse comportamento ainda adere à semântica de gravação antecipada (WAL), pois os registros (log) no buffer de log de transações persistente foram gravados ou protegidos em mídia durável. Foram observados ganhos consideráveis de desempenho para cargas de trabalho transacionais que usam o pool de buffer híbrido e o buffer de log persistente juntos dessa maneira.

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

Práticas recomendadas para pool de buffer 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 DAX (Acesso Direto).

  • Habilite a política Bloquear páginas na memória no Windows.

  • Os tamanhos dos ficheiros devem ser múltiplos de 2 MB (módulo 2 MB deve ser igual a zero).

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

  • Com a configuração de escopo do servidor para pool de buffer híbrido habilitada, você pode usar a configuração de escopo do banco de dados para desabilitar o recurso para bancos de dados de usuários individuais.

  • A partir do SQL Server 2019 (15.x) 3 (consulte KB4538118), o cache de leitura foi habilitado por padrão, um processo em que as páginas mais quentes são rastreadas no pool de buffers híbrido e, em seguida, promovidas automaticamente para um pool de buffers DRAM para melhorar o desempenho.

  • A partir do SQL Server 2022 (16.x) 1, a Gravação Direta é o comportamento padrão quando o pool de buffers híbridos é combinado com o buffer de log persistente. Isso deve melhorar o desempenho para quase todas as cargas de trabalho, mas sempre há uma chance de regressão e a UC deve ser testada minuciosamente antes de ser aplicada. Se ocorrer regressão devido a essa alteração de comportamento, você pode reverter para o comportamento anterior usando o sinalizador de rastreamento de inicialização 898.

  • A partir do SQL Server 2022 (16.x) CU 1, o sinalizador de rastreamento 809 será ignorado pelo SQL Server na inicialização. O sinalizador de rastreamento 809 e o sinalizador de rastreamento 898 se aplicam somente ao Windows e não se aplicam ao SQL Server no Linux. Os sinalizadores de rastreamento só devem ser usados quando direcionados a fazê-lo por um profissional certificado do Microsoft Server.