Compartilhar via


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 do SQL Server tiver aguardado a memória de 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 preenchimento 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, o 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 um pouco entre as versões do SQL Server. Você pode ver o valor de tempo limite definido no nível do servidor observando 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, significa que a consulta expelida esperou por algumas outras solicitações por mais de 20 minutos para concluir seu 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 longa 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 elas usam.

Ação do usuário

Se você não estiver usando o Administrador de Recursos para limitar o pool de memória para determinadas cargas de trabalho, poderá verificar o estado geral do servidor e a carga de trabalho. Se você estiver usando o Administrador de Recursos, verifique as configurações do pool de recursos ou 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 de pouca memória causados por concessões de memória no SQL Server.

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

  1. Identifique quais solicitações no SQL Server são os grandes consumidores de memória ou de concessão de memória QE. Para obter mais informações, consulte Como identificar esperas pela memória de execução de 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 o SQL Server estime 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 o Administrador de Recursos para limitar o efeito do uso de memória QE apenas a uma determinada carga de trabalho.

  7. O 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 em runtime. Esse recurso pode evitar problemas de concessão de memória em primeiro lugar.

  8. Aumente a memória do SQL Server 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 - Aumente 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 o aumento dos requisitos de memória para o SQL Server. As configurações padrão e recomendadas estão listadas em 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 mova-os para um servidor separado. Essa ação pode remover a pressão da memória externa.

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

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE