Atualmente, experimento RESOURCE_SEMAPHORE_QUERY_COMPILE espera, causando um pico de CPU de 100% que dura de 10 a 20 minutos e desaparece apenas parando completamente o tráfego. Achei que poderia ser uma pressão de memória e me perguntei se a redução do tamanho dos índices ajudaria com a pressão da memória.
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Dê uma olhada nesta referência no MSDN sobre
sys.dm_os_wait_stats
. Aqui está uma citação da referência acima sobreRESOURCE_SEMAPHORE_QUERY_COMPILE
:Esse tipo de espera, conforme citado acima, é devido a muitas compilações acontecendo ao mesmo tempo. O que parece, se você está vendo consistentemente esse tipo de espera (ao contrário de ir de um cache de plano frio), então você tem uma carga de trabalho ad hoc muito alta. Em outras palavras, você pode estar experimentando a falta de reutilização do plano (um monte de planos que não são parametrizados/preparados, ou não usando procedimentos armazenados e, portanto, uma nova consulta ad hoc surge, pois não há plano que possa ser reutilizado vou compilar um novo).
Existem algumas maneiras de remediar isso, se for esse o caso. A maneira real de corrigir isso é garantir que os planos preparados e os procedimentos armazenados estejam sendo usados . Um método de força bruta é configurar o banco de dados para utilizar a parametrização forçada. Eu salvaria o último como último recurso, pois pode haver algumas desvantagens em forçar a parametrização .
Existem algumas maneiras de ficar de olho em como está a reutilização do seu plano. O mais fácil (na minha opinião) seria capturar alguns contadores de perfmon para a instância:
É uma boa regra geral que as compilações por segundo não devem exceder 10% das solicitações em lote por segundo e as recompilações por segundo não devem exceder 10% das compilações por segundo. Eu normalmente vou a partir daí ao solucionar problemas de reutilização de cache do plano. Sinta-se à vontade para monitorar esses contadores e postar os resultados em sua pergunta e posso ajudar a interpretar.
E para responder às suas perguntas diretas, não reduzir os tamanhos dos índices ou limpar o cache de dados não aliviará seus problemas.