Partilhar via


MSSQLSERVER_8645

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

Detalhes

Atributo Valor
Nome do Produto Servidor SQL
ID do Evento 8645
Origem do evento MSSQLSERVER
Componente SQLEngine
Nome simbólico MEMTIMEDOUT_ERR
Texto da mensagem Ocorreu um tempo limite enquanto aguardava que os recursos de memória executassem a consulta no pool de recursos '%ls' (%ld). Execute novamente a consulta.

Explicação

Este erro é gerado se uma solicitação do SQL Server tiver esperado por 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 preenchimento de índices. 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 em 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 de 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 observando timeout_sec em sys.dm_exec_query_memory_grants.

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

Motivo

Este erro pode ser visto em relação às 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 aguardou que outras solicitações fossem 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 tão longas em sua carga de trabalho, você deve 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 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 acima mencionado. Estas etapas podem ajudar a reduzir ou eliminar erros de memória QE:

  1. Identifique quais solicitações no 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 aguarda a 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 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 da memória QE apenas a uma determinada carga de trabalho.

  7. O SQL Server 2017 e 2019 usam processamento de consulta adaptável, permitindo que o mecanismo de feedback de concessão de memória ajuste o tamanho da concessão de memória dinamicamente em tempo de execução. 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 de memória do SQL Server:

      • max server memory - aumente se necessário
      • min memória do servidor
      • Memória mínima por consulta
    2. Observe configurações incomuns. Corrija-os 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 ao nível do SO (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. Esta ação pode remover a pressão da memória externa.

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

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE