Dicas SQL Server

Como diminuir o RESOURCE_SEMAPHORE_QUERY_COMPILE

Como diminuir o RESOURCE_SEMAPHORE_QUERY_COMPILE

Saiba agora mesmo como você pode diminuir o RESOURCE_SEMAPHORE_QUERY_COMPILE no SQL Server.

Recentemente eu trabalhei em um projeto de tunning e performance SQL Server, o ambiente estava bem lento mesmo. Ao analisar os principais waits que estavam ocorrendo no banco de dados SQL Server do cliente, pude identificar que um dos principais waits eram RESOURCE_SEMAPHORE_QUERY_COMPILE.

A princípio achei interessante, pois já tinha trabalhado com RESOURCE_SEMAPHORE. Então vou deixar aqui para vocês algumas dicas de como eu fiz para diminuir o RESOURCE_SEMAPHORE_QUERY_COMPILE

Entendendo o RESOURCE_SEMAPHORE_QUERY_COMPILE

Para entender melhor do que se trata o RESOURCE_SEMAPHORE_QUERY_COMPILE ocorre quando uma consulta está esperando por liberação da memória que vai permitir que a compilação ocorra.

A memória de compilação é retirada do buffer pool e mantida pelo tempo necessário para concluir o processo de compilação. O que em muitos casos acontecem é que o uso de muitas páginas em memória para várias compilações simultâneas cause uma pressão na memória. Para mitigar isso o SQL calcula quais consultas exigirão um grande número de páginas e para isso força algumas esperas.

Se já estiver com pressão de memória o SQL Server limitará o número de consultas intensivas de recursos que podem ser compiladas simultaneamente. Em resumo, significa que você pode ter muitas consultas que exigem muita memória. Ou outro recurso está pegando as páginas de memória do buffer pool.

Como posso investigar RESOURCE_SEMAPHORE_QUERY_COMPILE?

No meu caso eu abri o perfmon e verifiquei os seguintes contadores:

  • Compilations/sec
  • Compilations/batch
  • Recompilations/sec
  • Batch requests/sec

Em breve farei artigos sobre esses contadores com mais detalhes para vocês, se você ver que esse post já é antigo, pode procurar no campo de busca o nome desses contadores que certamente aparecerá esses detalhes que disse agora mesmo.

Recomendo também investigar as consultas que demoram mais tempo no SQL Server, para encontrar isso você pode investigar nas DMV’s sys.dm_exec_query_memory_grants, sys.dm_exec_query_resource_semaphores.

Caso você não tenha conseguido, entre em contato comigo para eu te mostrar como podemos resolver isso.

Consultoria SQL Server Remoto

Um grande abraço!

Como diminuir o RESOURCE_SEMAPHORE_QUERY_COMPILE
The following two tabs change content below.

Wesley Mota