MSSQLSERVER_8645

Aplica-se a:SQL Server

Detalhes

Atributo Valor
Nome do Produto SQL Server
ID do evento 8645
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico MEMTIMEDOUT_ERR
Texto da mensagem Tempo limite excedido ao aguardar recursos de memória para executar a consulta no pool de recursos '%ls' (%ld). Execute a consulta novamente.

Explicação

Esse erro será gerado se uma solicitação de SQL Server aguardar a memória QE (execução de consulta) por um longo período de tempo e a memória não estiver disponível. A memória de execução de consulta é usada principalmente para operações de classificação, operações de hash, operações de cópia em massa e criação e população de índice. Uma consulta que executa uma dessas operações solicita uma concessão de memória. Se nenhuma memória estiver disponível, a consulta será definida para aguardar um RESOURCE_SEMAPHORE até que a memória fique disponível. Se a memória não estiver disponível após mais de 20 minutos de espera, SQL Server encerrará a consulta com o erro 8645 "Ocorreu um tempo limite enquanto aguardava que os recursos de memória executassem a consulta no pool de recursos 'default'. O valor de tempo limite varia ligeiramente entre versões de SQL Server. Você pode ver o valor de tempo limite definido no nível do servidor examinando timeout_sec em sys.dm_exec_query_memory_grants.

Causa

Esse erro pode ser visto em relação a concessões de memória e esperas prolongadas para que essa memória fique disponível. Normalmente, quando uma consulta é concluída, ela libera a memória de execução que usa. Portanto, se você vir esse erro, isso significa que a consulta com tempo limite esperou por algumas outras solicitações por mais de 20 minutos para concluir o trabalho. Pode haver apenas uma única solicitação que consumiu toda a memória QE disponível ou pode haver muitas solicitações e, juntas, suas concessões de memória esgotaram a memória QE. Se você tiver solicitações de execução tão longas em sua carga de trabalho, deverá tomar medidas para melhorar a duração da execução e diminuir a quantidade de memória QE que eles usam.

Ação do usuário

Se você não estiver usando Resource Governor para limitar o pool de memória de determinadas cargas de trabalho, poderá verificar o estado geral do servidor e a carga de trabalho. Se você estiver usando Resource Governor marcar o pool de recursos ou as configurações do grupo de carga de trabalho.

Uma explicação detalhada e as etapas de solução de problemas são abordadas em Solucionar problemas de desempenho lento ou memória baixa causados por concessões de memória em SQL Server.

A lista a seguir resume as etapas detalhadas no artigo mencionado anteriormente. Essas etapas podem ajudar a reduzir ou eliminar erros de memória QE:

  1. Identifique quais solicitações em SQL Server são a concessão de memória grande ou os consumidores de memória QE. Para obter mais informações, consulte Como identificar esperas pela memória de execução da consulta.

  2. Reescreva consultas para minimizar ou evitar operações de classificação e hash.

  3. Atualize as estatísticas e mantenha-as atualizadas regularmente para garantir que SQL Server estima a concessão de memória corretamente.

  4. Crie índices apropriados para a consulta ou consultas identificadas. Os índices podem reduzir o grande número de linhas processadas, alterando assim os algoritmos JOIN e reduzindo o tamanho das concessões ou eliminando-as completamente.

  5. Use a dica OPTION (min_grant_percent = XX, max_grant_percent = XX) em suas consultas sempre que possível.

  6. Use Resource Governor para limitar o efeito do uso de memória QE apenas a uma determinada carga de trabalho.

  7. SQL Server 2017 e 2019 usam o processamento de consulta adaptável, permitindo que o mecanismo de comentários de concessão de memória ajuste o tamanho da concessão de memória dinamicamente no runtime. Esse recurso pode impedir problemas de concessão de memória em primeiro lugar.

  8. Aumente SQL Server memória ou ajuste as configurações existentes.

    1. Verifique os seguintes parâmetros de configuração da memória do SQL Server:

      • memória máxima do servidor – aumentar se necessário
      • memória mínima do servidor
      • memória mínima por consulta
    2. Observe se há configurações incomuns. Corrija-as conforme necessário. Considere os requisitos de memória aumentados para SQL Server. As configurações padrão e recomendadas estão listadas nas opções de configuração de memória do servidor .

  9. Aumente a memória no nível do sistema operacional (RAM física ou virtual).

  10. Verifique se outros aplicativos ou serviços estão consumindo memória neste servidor. Reconfigure aplicativos ou serviços menos críticos para consumir menos memória ou movê-los para um servidor separado. Essa ação pode remover a pressão de memória externa.

  11. Execute os comandos DBCC a seguir para liberar vários caches de memória SQL Server – uma medida temporária.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE