O grupo de arquivos com otimização de memória

Aplica-se a:SQL Server

Para criar tabelas com otimização de memória, você deve primeiro criar um grupo de arquivos com otimização de memória. O grupo de arquivos com otimização de memória retém um ou mais contêineres. Cada contêiner contém arquivos de dados ou arquivos delta, ou então ambos.

Embora as linhas de dados das tabelas SCHEMA_ONLY não persistam e os metadados para tabelas otimizadas para memória e procedimentos armazenados em compilação nativa estejam armazenados nos catálogos tradicionais, o mecanismo OLTP in-memory ainda requer um grupo de arquivos com otimização de memória para tabelas otimizadas para memória SCHEMA_ONLY para fornecer uma experiência uniforme para bancos de dados com tabelas otimizadas para memória.

O grupo de arquivos com otimização de memória baseia-se no grupo de arquivos do fluxo de arquivos, com as seguintes diferenças:

  • Só é possível criar um grupo de arquivos com otimização de memória por banco de dados. É necessário marcar explicitamente o grupo de arquivos como contendo o memory_optimized_data. Você pode criar o grupo de arquivos ao criar o banco de dados ou poderá adicioná-lo posteriormente:

    ALTER DATABASE imoltp ADD FILEGROUP imoltp_mod CONTAINS MEMORY_OPTIMIZED_DATA  
    
  • É necessário adicionar um ou mais contêineres ao grupo de arquivos MEMORY_OPTIMIZED_DATA. Por exemplo:

    ALTER DATABASE imoltp ADD FILE (name='imoltp_mod1', filename='c:\data\imoltp_mod1') TO FILEGROUP imoltp_mod  
    
  • Não é necessário habilitar o fluxo de arquivos (Habilitar e configurar FILESTREAM) para criar um grupo de arquivos com otimização de memória. O mapeamento do fluxo de arquivos é realizado pelo mecanismo OLTP in-memory.

  • Você pode adicionar novos contêineres a um grupo de arquivos com otimização de memória. Você pode precisar de um novo contêiner para expandir o armazenamento necessário para uma tabela otimizada para memória durável, bem como para distribuir a E/S entre vários contêineres.

  • A movimentação de dados com um grupo de arquivos otimizado para memória é otimizada em uma configuração de Grupo de Disponibilidade Always On. Diferentemente dos arquivos FILESTREAM que são enviados para as réplicas secundárias, os arquivos de ponto de verificação (tanto de dados quanto delta) no grupo de arquivos com otimização de memória não são enviados para as réplicas secundárias. Os arquivos de dados e os arquivos delta são criados usando o log de transação na réplica secundária.

Observação

No SQL Server 2022 (16.x) e em versões mais antigas, depois de usar um grupo de arquivos com otimização de memória, você só poderá removê-lo removendo o banco de dados. Você não pode descartar um contêiner não vazio ou descartar o último contêiner restante mesmo que ele esteja vazio. Você também não pode mover dados e pares de arquivos delta para outro contêiner no grupo de arquivos com otimização de memória.

A partir do SQL Server 2025 (17.x), você pode remover o último contêiner restante e remover o grupo de arquivos com otimização de memória. Para obter mais informações, consulte o contêiner com otimização de memória e a remoção do grupo de arquivos.

Configurando um grupo de arquivos com otimização de memória

Considere criar múltiplos contêineres em um grupo de arquivos com otimização de memória e distribui-los em diferentes unidades para obter mais largura de banda para transferir os dados para a memória.

Em um cenário com vários contêineres e várias unidades, os arquivos de dados e os arquivos delta são alocados nos contêineres em esquema round-robin. O primeiro arquivo de dados é alocado no primeiro contêiner e o arquivo delta é alocado no próximo contêiner, repetindo o padrão de alocação. Este esquema de alocação distribui os dados e os arquivos delta uniformemente entre os contêineres se você tiver um número ímpar de discos, cada disco mapeado para um contêiner. Contudo, se você tiver um número par de unidades, cada uma mapeada para um contêiner, isso poderá resultar em armazenamento desequilibrado, com arquivos de dados mapeados para unidades ímpares e arquivos delta mapeados para unidades pares. Para obter um fluxo equilibrado de E/S na recuperação, considere a colocação de pares de arquivos de dados e delta nos mesmos eixos/armazenamentos.

Ao configurar o armazenamento, é necessário disponibilizar espaço livre em disco equivalente a quatro vezes o tamanho das tabelas duráveis otimizadas para memória. Também é necessário garantir que o subsistema de E/S seja compatível com a IOPS necessária para a carga de trabalho. Se os pares de arquivos de dados e delta forem gerados a um determinado valor de IOPS, você precisará de três vezes esse valor de IOPS para considerar as operações de armazenamento e mesclagem. Você pode adicionar capacidade de armazenamento e IOPS adicionando um ou mais contêineres ao grupo de arquivos com otimização de memória.

Cuidado

Se um MAXSIZE valor está definido para o grupo de arquivos com otimização de memória e arquivos de ponto de verificação excedem o tamanho máximo do contêiner, o banco de dados se torna suspeito.
Nesse caso, não tente definir o banco de dados como OFFLINE e ONLINE, fazendo o banco de dados permanecer no estado RECOVERY_PENDING.

Confira também

Criando e gerenciando armazenamento para objetos com otimização de memória
Arquivos e grupos de arquivos do banco de dados
ALTER DATABASE Opções de arquivo e de grupo de arquivos (Transact-SQL)