Compartilhar via


Resolver problemas de memória insuficiente

O SQL Server In-Memory OLTP usa mais memória e de maneiras diferentes do SQL Server. É possível que a quantidade de memória instalada e alocada para In-Memory OLTP se torne inadequada para suas necessidades crescentes. Se assim for, você pode ficar sem memória. Este tópico aborda como se recuperar de uma situação de OOM. Consulte Monitorar e solucionar problemas de uso de memória para obter diretrizes que possam ajudá-lo a evitar muitas situações de OOM.

Abordado neste tópico

Tópico Visão geral
Resolver falhas de restauração de banco de dados devido ao OOM O que fazer se você receber a mensagem de erro"Falha na operação de restauração para o banco de dados '<databaseName>' devido à memória insuficiente no pool de recursos '<resourcePoolName>'."
Resolver o impacto da memória baixa ou das condições do OOM na carga de trabalho O que fazer se você enfrentar problemas de pouca memória que estão impactando negativamente o desempenho.
Resolver falhas de alocação de página devido à memória insuficiente quando há memória suficiente disponível O que fazer se você receber a mensagem de erro "Impedindo alocações de página para o banco de dados '<databaseName>' devido à memória insuficiente no pool de recursos '<resourcePoolName>'." ..." quando a memória disponível é suficiente para a operação.

Resolver falhas de restauração de banco de dados devido ao OOM

Ao tentar restaurar um banco de dados, você pode receber a mensagem de erro: "Falha na operação de restauração do banco de dados '<databaseName>' devido à memória insuficiente no pool de recursos '<resourcePoolName>'." Antes de restaurar o banco de dados com êxito, você deve resolver o problema de memória insuficiente, disponibilizando mais memória.

Para resolver a falha de recuperação devido à condição OOM, aumente temporariamente a memória disponível para a operação de recuperação usando qualquer ou todos esses meios.

  • Feche temporariamente os aplicativos em execução.
    Ao fechar um ou mais aplicativos em execução, como Visual Studio, Internet Explorer, OneNote e outros, você disponibiliza a memória que eles estavam usando para a operação de restauração. Você pode reiniciá-los após a restauração bem-sucedida.

  • Aumente o valor de MAX_MEMORY_PERCENT.
    Esse snippet de código altera MAX_MEMORY_PERCENT do pool de recursos poolHk para 70% de memória instalada.

    Importante

    Se o servidor estiver em execução em uma VM e não for dedicado, defina o valor de MIN_MEMORY_PERCENT para o mesmo valor que MAX_MEMORY_PERCENT.
    Consulte o tópico Práticas Recomendadas: Usando In-Memory OLTP em um ambiente de VM para obter mais informações.

    
    -- disable resource governor  
    ALTER RESOURCE GOVERNOR DISABLE  
    
    -- change the value of MAX_MEMORY_PERCENT  
    ALTER RESOURCE POOL PoolHk  
    WITH  
         ( MAX_MEMORY_PERCENT = 70 )  
    GO  
    
    -- reconfigure the Resource Governor  
    --    RECONFIGURE enables resource governor  
    ALTER RESOURCE GOVERNOR RECONFIGURE  
    GO  
    
    

    Para obter informações sobre valores máximos para MAX_MEMORY_PERCENT consulte a seção de tópico Porcentagem da memória disponível para tabelas e índices com otimização de memória

  • Reconfigure a memória máxima do servidor.
    Para obter informações sobre como configurar a memória máxima do servidor , consulte o tópico Otimizando o desempenho do servidor usando opções de configuração de memória.

Resolver o impacto da memória baixa ou das condições do OOM na carga de trabalho

Obviamente, é melhor evitar uma situação de pouca memória ou de 'Out of Memory' (OOM). Um bom planejamento e monitoramento podem ajudar a evitar situações de OOM. Ainda assim, o melhor planejamento nem sempre prevê o que realmente acontece e você pode acabar com memória baixa ou OOM. Há duas etapas para recuperar do OOM:

  1. Abrir um DAC (Conexão de Administrador Dedicado)

  2. Tomar medidas corretivas

Abrir um DAC (Conexão de Administrador Dedicado)

O Microsoft SQL Server fornece uma DAC (conexão de administrador dedicada). O DAC permite que um administrador acesse uma instância em execução do Mecanismo de Banco de Dados do SQL Server para solucionar problemas no servidor, mesmo quando o servidor não responde a outras conexões de cliente. O DAC está disponível por meio do sqlcmd utilitário e do SQL Server Management Studio (SSMS).

Para obter diretrizes sobre como usar sqlcmd e DAC, consulte Usando uma conexão de administrador dedicada. Para obter diretrizes sobre como usar o DAC por meio do SSMS, consulte Como usar a conexão de administrador dedicada com o SQL Server Management Studio.

Tomar medidas corretivas

Para resolver sua condição de OOM, você precisa liberar a memória existente reduzindo o uso ou disponibilizar mais memória para suas tabelas na memória.

Liberar memória existente

Excluir as linhas não essenciais das tabelas otimizadas para memória e aguardar a coleta de lixo

Você pode remover linhas não essenciais de uma tabela com otimização de memória. O coletor de lixo retorna a memória usada por essas linhas para a memória disponível. . O mecanismo OLTP na memória coleta linhas de lixo agressivamente. No entanto, uma transação de longa duração pode impedir a coleta de lixo. Por exemplo, se você tiver uma transação que seja executada por 5 minutos, qualquer versão de linha criada devido às operações de atualização/exclusão enquanto a transação estava ativa não poderá ser coletada como lixo.

Mover uma ou mais linhas para uma tabela baseada em disco

Os artigos do TechNet a seguir fornecem diretrizes sobre como mover linhas de uma tabela com otimização de memória para uma tabela baseada em disco.

Aumentar a memória disponível

Aumente o valor de MAX_MEMORY_PERCENT no pool de recursos

Se você não tiver criado um pool de recursos nomeado para suas tabelas na memória, deverá fazer isso e associar seus bancos de dados OLTP In-Memory a ele. Consulte o tópico Associar um banco de dados com tabelas Memory-Optimized a um pool de recursos para obter diretrizes sobre como criar e associar seus bancos de dados OLTP In-Memory a um pool de recursos.

Se o banco de dados OLTP In-Memory estiver associado a um pool de recursos, você poderá aumentar a porcentagem de memória que o pool pode acessar. Consulte o sub-tópico Alterar MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT em um pool existente para obter orientações sobre como alterar o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT para um pool de recursos.

Aumente o valor de MAX_MEMORY_PERCENT.
Este trecho de código altera o MAX_MEMORY_PERCENT do pool de recursos PoolHk para 70% de memória instalada.

Importante

Se o servidor estiver em execução em uma VM e não for dedicado, defina o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT com o mesmo valor.
Consulte o tópico Práticas Recomendadas: Usando In-Memory OLTP em um ambiente de VM para obter mais informações.

  
-- disable resource governor  
ALTER RESOURCE GOVERNOR DISABLE  
  
-- change the value of MAX_MEMORY_PERCENT  
ALTER RESOURCE POOL PoolHk  
WITH  
     ( MAX_MEMORY_PERCENT = 70 )  
GO  
  
-- reconfigure the Resource Governor  
--    RECONFIGURE enables resource governor  
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  
  

Para obter informações sobre valores máximos para MAX_MEMORY_PERCENT consulte a seção de tópico Porcentagem da memória disponível para tabelas e índices com otimização de memória.

Instalar memória adicional

Em última análise, a melhor solução, se possível, é instalar memória física adicional. Ao fazer isso, lembre-se de que provavelmente também será capaz de aumentar o valor de MAX_MEMORY_PERCENT (consulte o subtópico Alterar MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT em um pool existente), já que o SQL Server provavelmente não precisará de mais memória, permitindo que a maior parte, se não toda, da memória recém-instalada fique disponível para o pool de recursos.

Importante

Se o servidor estiver em execução em uma VM e não for dedicado, defina o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT com o mesmo valor.
Consulte o tópico Práticas Recomendadas: Usando In-Memory OLTP em um ambiente de VM para obter mais informações.

Resolver falhas de alocação de página devido à memória insuficiente quando há memória suficiente disponível

Se você receber a mensagem de erro, "Não permitir alocações de página para o banco de dados '<databaseName>' devido à memória insuficiente no pool de recursos '<resourcePoolName>'. Consulte 'https://go.microsoft.com/fwlink/?LinkId=330673' para obter mais informações no log de erros quando a memória física disponível for suficiente para alocar a página; pode ser devido a um Administrador de Recursos desabilitado. Quando o Administrador de Recursos é desabilitado, MEMORYBROKER_FOR_RESERVE induz uma pressão de memória artificial.

Para resolver isso, você precisa habilitar o Administrador de Recursos.

Consulte Habilitar o Administrador de Recursos para obter informações sobre limites e restrições, bem como diretrizes sobre como habilitar o Administrador de Recursos usando o Pesquisador de Objetos, as propriedades do Administrador de Recursos ou o Transact-SQL.

Consulte Também

Gerenciando memória para In-Memory OLTP
Monitorar e solucionar problemas de uso de memória
Associar um banco de dados com tabelas Memory-Optimized a um pool de recursos
Práticas recomendadas: usando In-Memory OLTP em um ambiente de VM