Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
O OLTP in-memory usa mais memória e de maneiras diferentes do SQL Server. É possível que a quantidade de memória que você instalou e alocou para o OLTP In-Memory se torne inadequada para suas necessidades crescentes. Se for o caso, você pode ficar sem memória. Este tópico aborda como se recuperar de uma situação de OOM. Veja Monitorar e solucionar problemas de uso da memória para obter diretrizes que podem ajudá-lo a evitar várias situações de OOM.
Tópicos abordados
| Tópico | Visão geral |
|---|---|
| Resolver falhas de restauração de banco de dados devido a OOM | O que fazer se você receber a mensagem de erro “Falha na operação de restauração do banco de dados ‘<databaseName>‘ devido a memória insuficiente no pool de recursos ‘<resourcePoolName>‘”. |
| Resolver o impacto de pouca memória ou condições de OOM na carga de trabalho | O que fazer se você perceber que problemas de baixa memória estão afetando 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 “Não permitindo 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. |
| Práticas recomendadas ao usar o OLTP in-memory em um ambiente de VM | O que deve ser levado em consideração ao usar o OLTP in-memory em um ambiente virtualizado. |
Resolver falhas de restauração de banco de dados devido a OOM
Ao tentar restaurar um banco de dados, você poderá receber a mensagem de erro: “Falha na operação de restauração do banco de dados '<databaseName>' devido a memória insuficiente no pool de recursos '<resourcePoolName>‘”. Isso indica que o servidor não tem memória disponível suficiente para restaurar o banco de dados.
O servidor no qual você restaura um banco de dados deve ter memória disponível suficiente para as tabelas otimizadas para memória no backup do banco de dados; caso contrário, o banco de dados não ficará online e será marcado como suspeito.
Se o servidor tiver memória física suficiente, mas você ainda estiver vendo este erro, é possível que outros processos estejam usando uma quantidade excessiva de memória ou um problema de configuração faz com que não haja memória suficiente disponível para a restauração. Para esta classe de problemas, use as seguintes medidas para disponibilizar mais memória para a operação de restauração:
Feche temporariamente os aplicativos em execução.
Ao fechar um ou mais aplicativos em execução ou interromper serviços desnecessários no momento, você disponibiliza a memória que eles estavam usando para a operação de restauração. Você poderá reiniciá-los após a restauração bem-sucedida.Aumente o valor de MAX_MEMORY_PERCENT.
Se o banco de dados for associado a um pool de recursos, o que é uma prática recomendada, a memória disponível para a restauração será controlada por MAX_MEMORY_PERCENT. Se o valor for muito baixo, a restauração falhará. Este trecho de código altera MAX_MEMORY_PERCENT do pool de recursos PoolHk para 70% da memória instalada.Importante
Se o servidor estiver sendo executado em uma máquina virtual e não for dedicado, defina o valor de MIN_MEMORY_PERCENT para o mesmo valor de MAX_MEMORY_PERCENT.
Confira o tópico Práticas recomendadas ao usar o OLTP in-memory 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 GOPara obter informações sobre os valores máximos para MAX_MEMORY_PERCENT, confira a seção do tópico Percentual de memória disponível para índices e tabelas com otimização de memória.
Aumente max server memory.
Para obter informações sobre como configurar a opção max server memory, consulte o tópico Opções de configuração de servidor Server Memory.
Resolver o impacto de pouca memória ou condições de OOM na carga de trabalho
Obviamente, é melhor não ficar com pouca memória ou na situação de OOM (memória insuficiente). Um bom planejamento e monitoramento pode ajudar a evitar situações de OOM. Ainda assim, o melhor planejamento nem sempre prevê o que realmente acontece e você pode acabar com pouca memória ou OOM. Há duas etapas para a recuperação de OOM:
Abrir uma DAC (Conexão de Administrador Dedicada)
O SQL Server fornece uma DAC (Conexão de Administrador Dedicada). A 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 está respondendo às conexões de outro cliente. A DAC está disponível por meio do utilitário sqlcmd e do SQL Server Management Studio.
Para obter orientações sobre como usar o DAC por meio do SSMS ou do sqlcmd, consulte Conexão de diagnóstico para administradores de banco de dados.
Realizar a ação corretiva
Para resolver sua situação de OOM, você precisa liberar memória reduzindo o consumo existente ou disponibilizar mais memória para suas tabelas em memória.
Liberar memória existente
Excluir linhas não essenciais da tabela com otimização de memória e aguardar a coleta de lixo
Você pode remover as 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 de OLTP na memória coleta linhas de lixo de maneira agressiva. No entanto, uma transação demorada poderá evitar a coleta de lixo. Por exemplo, se você tiver uma transação que é executada durante 5 minutos, todas as versões de linha criadas por causa das operações de atualização/exclusão enquanto a transação estava ativa não poderão ser limpas.
Mover uma ou mais linhas a uma tabela baseada em disco
Os seguintes artigos da TechNet fornecem orientação 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
Aumentar o valor de MAX_MEMORY_PERCENT no pool de recursos
Se você não tiver criado um pool de recursos nomeado para as tabelas na memória, deverá fazê-lo e associar os bancos de dados do OLTP in-memory a ele. Confira o tópico Associar um banco de dados a tabelas com otimização de memória a um pool de recursos para obter diretrizes sobre como criar e associar bancos de dados do OLTP in-memory a um pool de recursos.
Se seu banco de dados do OLTP in-memory estiver associado a um pool de recursos, você poderá aumentar a porcentagem de memória que o pool poderá acessar. Confira o subtópico Alterar MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT em um pool existente para obter diretrizes sobre como alterar o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT em um pool de recursos.
Aumente o valor de MAX_MEMORY_PERCENT.
Este trecho de código altera MAX_MEMORY_PERCENT do pool de recursos PoolHk para 70% da memória instalada.
Importante
Se o servidor estiver sendo executado em uma máquina virtual e não for dedicado, defina o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT como o mesmo.
Confira o tópico Práticas recomendadas ao usar o OLTP in-memory 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 to enabled it
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Para obter informações sobre os valores máximos para MAX_MEMORY_PERCENT, confira a seção do tópico Percentual de memória disponível para índices e tabelas com otimização de memória.
Instalar a memória adicional
Por fim, a melhor solução, se possível, é instalar mais memória física. Se você fizer isso, lembre-se de que provavelmente também poderá aumentar o valor de MAX_MEMORY_PERCENT (confira 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 você disponibilize toda ou a maior parte da memória recém-instalada ao pool de recursos.
Importante
Se o servidor estiver sendo executado em uma máquina virtual e não for dedicado, defina o valor de MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT como o mesmo.
Confira o tópico Práticas recomendadas ao usar o OLTP in-memory 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 Disallowing page allocations for database '*\<databaseName>*' due to insufficient memory in the resource pool '*\<resourcePoolName>*'. See 'https://go.microsoft.com/fwlink/?LinkId=330673' for more information. no log de erros quando a memória física disponível for suficiente para alocar a página, talvez isso ocorra porque um Administrador de Recursos está desabilitado. Quando o Governador de Recursos está desabilitado, MEMORYBROKER_FOR_RESERVE induz pressão artificial de memória.
Para resolver isso, é necessário habilitar o Administrador de Recursos.
Veja Habilitar 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.
Práticas recomendadas ao usar o OLTP in-memory em um ambiente de VM
A virtualização do servidor pode ajudá-lo a diminuir os custos operacionais e de capital com a TI, e atingir uma maior eficiência de TI com processos de provisionamento de aplicativo, manutenção, disponibilidade e backup/recuperação aprimorados. Com os avanços tecnológicos recentes, as cargas de trabalho de banco de dados complexas podem mais ser prontamente consolidadas usando a virtualização. Este tópico abrange as práticas recomendadas para usar o OLTP in-memory do SQL Server em um ambiente virtualizado.
Pré-alocação de memória
Para a memória em um ambiente virtualizado, o melhor desempenho e o suporte aprimorado são considerações essenciais. Você deve ser capaz de alocar memória rapidamente para máquinas virtuais dependendo de seus requisitos (cargas de pico e fora de pico) e garantir que a memória não seja desperdiçada. O recurso de Memória Dinâmica do Hyper-V aumenta a agilidade sobre como a memória é alocada e gerenciada entre as máquinas virtuais executadas em um host.
Algumas práticas recomendadas para virtualizar e gerenciar o SQL Server precisam ser modificadas ao virtualizar um banco de dados que tenha tabelas com otimização de memória. Sem tabelas com otimização de memória, duas das práticas recomendadas são:
- Se você usar a opção min server memory, é melhor atribuir somente a quantidade de memória necessária, para que permaneça memória suficiente para outros processos (evitando a paginação).
- Não defina o valor de pré-alocação de memória muito alto. Caso contrário, outros processos podem não obter memória suficiente no momento em que a exigirem e isso pode levar à paginação de memória.
Se você seguir as práticas acima para um banco de dados com tabelas otimizadas pela memória, uma tentativa de restaurar e recuperar um banco de dados poderá resultar no banco de dados ficando em um estado de “Recuperação Pendente”, mesmo se você tiver memória suficiente para recuperá-lo. A razão para isso é que, ao iniciar, o OLTP in-memory traz os dados para a memória de maneira mais agressiva do que a alocação de memória dinâmica faz ao alocar a memória no banco de dados.
Resolução
Para mitigar isso, pré-aloque memória suficiente no banco de dados para recuperá-lo ou reiniciá-lo, em vez de definir apenas um valor mínimo e depender da alocação dinâmica de memória para fornecer a memória adicional quando necessário.