Eu tenho execução de consulta lenta no meu SQL Server 2016.
Configurações do servidor:
- Memória física total: 128 GB
- Memória máxima do servidor SQL: 102 GB
- A replicação de transações está habilitada.
- Tamanho do banco de dados: 1,6 TB
- Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64) 18 de março de 2018 09:11:49 Direitos autorais (c) Microsoft Corporation Standard Edition (64 bits) no Windows Server 2016 Standard 10.0 (Build 14393: )
Executei a ring buffer
consulta para verificar se a memória física está baixa. A razão pela qual eu verifiquei o buffer de anel para a pressão da memória é porque meu cache do plano também está sendo limpo com frequência, mesmo que ninguém esteja executando nenhum script para limpar o cache Avail Phys Mem.KB
.
Uma coisa que aprendi é que todo RESOURCE_MEMPHYSICAL_LOW
o processo do indicador é 2, o que significa que o problema de memória está na memória alocada para o SQL Server e não no restante da memória disponível para o sistema operacional e outro aplicativo. PARA SUA INFORMAÇÃO. Este é um servidor dedicado do SQL Server.
Também verifiquei no Monitor de desempenho para Avaialable MBytes
o qual mostra o valor 16.662,00 (16 GB) conforme abaixo.
Acho que 16 GB são suficientes para SO+outros aplicativos, sendo este um servidor dedicado SQL server.
Verifiquei o diagnóstico do servidor também. Diz que 25 GB estão disponíveis.
Então agora estou confuso se:
- Existe uma pressão de memória neste servidor?
- O
RESOURCE_MEMPHYSICAL_LOW
sinalizador está sendo definido pelo sistema operacional ou processo externo ou SQL Server? - Devo habilitar o LPIM para corrigir esse problema?
Detalhes adicionais conforme a resposta de @Shanky.
- Eu tinha o Query store ativado, mas o desativei há uma semana.
- rounds_count para planos do SQL Server com ponteiro do relógio
HAND_EXTERNAL
está aumentando.
Mais detalhes.
- Estou enfrentando uma enorme concessão de memória por algumas consultas e isso está fazendo com que RESOURCE_SEMAPHORE aguarde outras consultas.
Essa enorme concessão de memória (uma consulta que verifiquei, a concessão de memória é de ~ 7 GB) resulta em uma pressão de memória do servidor SQL e isso pode ser a causa da limpeza e RESOURCE_MEMPHYSICAL_LOW
sinalização do cache do plano.
Com a informação limitada, não posso dizer com certeza. Precisa de mais parâmetros e saída do perfmon para informar sobre a pressão da memória. Mas sim, a partir da saída da consulta que você postou para o momento
2018-10-23 11:22:30:457
, havia de fato pouca memória para alguns processos, não para o sistema SQL Server como um todo.Olhe para a saída que diz que
RESOURCE_MEMPHYSICAL_LOW
tem valores de2
queIndicatorProcess
significa que certos processos que estavam em execução estavam de fato enfrentando pressão de memória, seIndicatorSystem
tivesse valor de 2, teria sido pressão de memória em todo o sistema. Observe também que a pressão da memória está vindo de baixa memória física (RAM) e não de baixa memória virtual (VAS). Então você pode ver que apenas tomando um valor para um pedaço de tempo é difícil dizer que há uma pressão de memória contínua . Eu sugiro que você leia Usando sys.dm_os_ring_buffers para diagnosticar problemas de memória no SQL Server para entender o que significam os valores Indicatorsystem e IndicatorProcessO LPIM não corrigirá o problema, apenas mascarará o problema e será uma solução alternativa. Você precisa descobrir o que está fazendo com que o monitor de recursos sinalize a notificação de pouca memória, é possível que algum processo em execução esteja causando isso. Agora, planejar o cache sendo limpo com frequência é algo que muitas pessoas relataram do SQL Server 2016 em diante e pode ser devido ao armazenamento de consultas, você está usando um?. O armazenamento de consultas costumava ser o culpado pela limpeza do cache do plano, mas como você está no SP mais recente, duvido desse fator.
Para ver a pressão da memória para o cache, também podemos usar DMV sys.dm_os_memory_cache_clock_hands
Se
rounds_count
estiver aumentando, isso significa que houve pressão que forçou os relógios a varrer o cache com mais frequência e remover as entradas.EDITAR:
Sim, muito provavelmente, eu vi que você levantou um tópico específico para esta questão e gostaria apenas de acrescentar que, antes de fazer qualquer coisa, certifique-se de ter as estatísticas atualizadas e os índices desfragmentados. Uma estatística desatualizada pode levar a um plano ruim que pode acabar pedindo mais memória e, portanto, esperas de semáforo.
Abaixo estão lista de tópicos falando sobre problema semelhante