Monitorar o armazenamento OLTP in-memory no Banco de Dados SQL do Azure

Aplica-se a: Banco de Dados SQL do Azure

Com o OLTP in-memory, os dados em tabelas com otimização de memória e variáveis de tabela residem no armazenamento OLTP in-memory, que é uma parte da memória do banco de dados reservada para dados in-memory.

  • Os bancos de dados e os pools elásticos nas camadas de serviço Premium (DTU) e Comercialmente Crítico (vCore) são compatíveis com o OLTP in-memory.
  • A camada de serviço de hiperescala é compatível com um subconjunto de objetos OLTP in-memory, mas não inclui tabelas com otimização de memória. Para obter mais informações, consulte Limitações da hiperescala.

Determinar se os dados se ajustam ao limite de armazenamento OLTP na memória

Determine os limites de armazenamento das diferentes objetivos de serviço. Cada objetivo de serviço Premium e Comercialmente Crítico tem um tamanho máximo de armazenamento OLTP in-memory.

A estimativa dos requisitos de memória para uma tabela com otimização de memória funciona no SQL Server da mesma forma como no Banco de Dados SQL do Azure. Analise Estimar requisitos de memória.

A tabela e as linhas de variável de tabela, bem como índices, contam para o limite. Além disso, as instruções ALTER TABLE precisam de memória suficiente para criar uma nova versão da tabela inteira e de seus índices.

Quando esse limite for alcançado, as operações insert e update poderão começar a falhar. Nesse ponto, você precisa excluir dados para recuperar a memória ou escalar verticalmente o objetivo de serviço de seu banco de dados ou pool elástico. Para obter mais informações, consulte Corrigir situações de armazenamento OLTP fora de memória - Erros 41823 e 41840.

Monitorar e alertar

Você pode monitorar o uso de armazenamento do OLTP in-memory como um percentual do limite de armazenamento do objetivo de serviço no portal do Azure:

  1. Na página Visão geral do banco de dados SQL, selecione o gráfico na página Monitoramento. Ou, no menu de navegação, localize Monitoramento e selecione Métricas.
  2. Selecione Adicionar métrica.
  3. Em Básico, selecione a métrica Porcentagem de armazenamento OLTP in-memory.
  4. Para adicionar um alerta, selecione na caixa Utilização de Recursos para abrir a página Métrica e selecione Nova regra de alerta. Siga as instruções para criar uma regra de alerta de métrica.

Ou use a consulta a seguir para mostrar a utilização de armazenamento na memória:

SELECT xtp_storage_percent 
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;

Resolver erros de memória insuficiente com OLTP in-memory

Atingir o limite de armazenamento OLTP in-memory em seu banco de dados ou pool elástico pode resultar na falha das instruções INSERT, UPDATE, ALTER e CREATE com o erro 41823 (para bancos de dados individuais) ou o erro 41840 (para pools elásticos). Ambos os erros fazem com que a transação ativa seja anulada.

Os erros 41823 e 41840 indicam que o tamanho das tabelas com otimização de memória e variáveis de tabela no banco de dados ou pool elástico atingiu o tamanho máximo de armazenamento OLTP in-memory.

Para resolver esses erros:

  • Exclua os dados das tabelas com otimização de memória, potencialmente descarregando os dados em tabelas baseadas em disco tradicionais ou
  • Atualize o objetivo de serviço para um com armazenamento OLTP in-memory suficiente para os dados que você precisa manter em tabelas com otimização de memória e variáveis de tabela.

Observação

Em casos raros, erros 41823 e 41840 podem ser transitórios, o que significa que há armazenamento suficiente OLTP na memória disponível e que repetir a operação será bem-sucedida. Portanto, é recomendável monitorar o armazenamento OLTP na memória global disponível e tentar novamente quando encontrar erro 41823 ou 41840 pela primeira vez. Para obter mais informações sobre a lógica de repetição, consulte Detecção de conflito e lógica de repetição com OLTP na memória.

Monitorar com DMVs

  • Ao monitorar o consumo de memória proativamente, você pode determinar como o consumo de memória está crescendo e quanto espaço livre resta nos limites de recursos. Identificar a quantidade de memória que está sendo consumido pelos objetos no banco de dados ou instância. Você pode usar os DMVs sys.dm_db_xtp_table_memory_stats ou sys.dm_os_memory_clerks.

    • Você pode localizar o consumo de memória para todas as tabelas de usuário, índices e objetos do sistema consultando sys.dm_db_xtp_table_memory_stats:

      SELECT object_name(object_id) AS [Name], *
      FROM sys.dm_db_xtp_table_memory_stats;
      
    • A memória alocada para o mecanismo do OLTP in-memory e os objetos com otimização de memória são gerenciados da mesma maneira que outros consumidores de memória em um banco de dados. Os administradores de memória do tipo MEMORYCLERK_XTP são responsáveis por toda a memória alocada para o mecanismo do OLTP in-memory. Use a consulta a seguir para localizar toda a memória usada pelo mecanismo OLTP in-memory, incluindo a memória dedicada a bancos de dados específicos.

      -- This DMV accounts for all memory used by the In-Memory OLTP engine
      SELECT [type], [name]
           , memory_node_id  
           , pages_kb/1024. AS pages_MB
      FROM sys.dm_os_memory_clerks 
      WHERE [type] LIKE '%xtp%';
      
      type                 name       memory_node_id pages_MB  
      -------------------- ---------- -------------- --------------------  
      MEMORYCLERK_XTP      Default    0              18  
      MEMORYCLERK_XTP      DB_ID_5    0              1358  
      MEMORYCLERK_XTP      Default    64             0  
      
  • Você também pode obter mais informações sobre erros de memória insuficiente no Banco de Dados SQL do Azure com o modo de exibição de gerenciamento dinâmico sys.dm_os_out_of_memory_events. Por exemplo:

    SELECT *
    FROM sys.dm_os_out_of_memory_events
    ORDER BY event_time DESC;