Compartilhar via


MSSQLSERVER_8645

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

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 aguardar uma concessão de memória de execução de consulta (QE) 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 depois de aguardar um período de tempo limite determinado dinamicamente pelo custo da consulta, conforme estimado pelo otimizador de consulta, o SQL Server encerrará a consulta com o erro 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'. O valor do tempo limite varia ligeiramente entre as versões do SQL Server, mas tem um valor máximo de tempo limite de espera de 24 horas. Você pode ver o valor de tempo limite definido no nível do servidor examinando timeout_secsys.dm_exec_query_memory_grants.

Para obter uma explicação detalhada sobre as etapas de solução de problemas, examine o desempenho lento ou problemas de memória baixos causados por concessões de memória no SQL Server.

Causa

Esse erro pode ser visto em relação a concessões de memória e esperas prolongadas para que a 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 que outras solicitações forem concluídas além do período de tempo limite. Pode haver apenas uma única solicitação que consumiu toda a memória QE disponível ou pode haver muitas solicitações e combinadas, 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.

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