Estamos tendo problemas de pressão de memória ( RESOURCE_SEMAPHORE
esperas) em um de nossos servidores, mas há muito poucas conexões ativas acontecendo ao mesmo tempo. Logicamente, não parece que as conexões adormecidas se manteriam na memória, mas estou me perguntando se elas realmente o fazem? O IderaDM mostra várias conexões adormecidas com alto uso de memória.
Este é um servidor SQL 2008 SP3 com 27 Gb de memória. Normalmente, há apenas duas a 10 chamadas ativas acontecendo a qualquer momento e uma boa parte delas está tendo esperas resource_semaphore. Este servidor mantém nossos bancos de dados de terceiros, portanto não podemos alterar a maioria das chamadas/processos.
Então, é possível que as conexões adormecidas estejam retendo a memória ou devo procurar em outro lugar?
Se você está tentando rastrear o uso de memória e quais consultas são os maiores infratores, execute as seguintes etapas:
Identifique qual banco de dados na instância está consumindo mais memória
Pesquise quais objetos dentro do referido banco de dados estão consumindo mais memória
Revise quais consultas estão atingindo os referidos objetos na memória
Espero que isso lhe dê algumas perguntas problemáticas. Você pode descobrir que simplesmente não tem a quantidade adequada de memória na instância para a carga de trabalho que ela está tentando acomodar. Alternativamente, você pode encontrar uma consulta escrita por um usuário faltando algo simplesmente irritante como um predicado (por exemplo, a
WHERE
cláusula).Se você quiser se aprofundar no plano de execução, pode pegar
plan_handle
e enviar para esta consulta:e revisar o plano de execução. Se você não conseguir ajustar a referida consulta, isso provavelmente não será tão útil para você.
Depois de descobrir o que está usando a memória na instância, você pode ter uma ideia melhor de como colocar o sistema de volta em um estado íntegro.
Eu uso a consulta abaixo sem nada excluído porque quero ver onde estão as esperas em segundo plano do SQL Server e todas estarão na mesma porcentagem. Itens como
HADR_FILESTREAM_IOMGR_IOCOMPLETION
,XE_TIMER_EVENT
eREQUEST_FOR_DEADLOCK_SEARCH
. Se o seuRESOURCE_SEMAPHORE
estiver abaixo do plano de fundo do sistema, não há problema. Se estiver acima do plano de fundo do sistema, poste o que é.RESOURCE_SEMAPHORE significa que você tem consultas que estão aguardando uma concessão de memória.
eu perguntaria
para ver o que está consumindo toda a memória do espaço de trabalho de consulta e o que está aguardando memória. Este artigo fornece algumas boas dicas para solucionar problemas de RESOURCE_SEMAPHORE . Infelizmente, isso normalmente significa que você precisa ajustar uma consulta ou consultas; portanto, se for um código de terceiros, talvez seja necessário voltar ao fornecedor. Dependendo do problema específico, você pode melhorá-lo adicionando um índice, mas isso é apenas especulação.