Temos um servidor cliente contendo SQL Server 2008R2 com cerca de 50 bancos de dados. O problema é que o uso da CPU chega a 100% (ou próximo disso) e dura algumas horas. Isso geralmente acontece pela manhã (geralmente entre 6h e 9h). O uso médio da CPU é de 30%
Examinamos os relatórios agendados e não encontramos nada - decidimos agendá-los no início da manhã e isso não adiantou.
Amanhã estarei no remoto para investigar o problema. Reconstruímos os índices e isso não ajudou. Eu tenho um conjunto de DMVs para verificar as consultas com maior tempo de trabalho e maior tempo de execução.
O SQL Server rastreia todas as consultas executadas para que os Detran possam acessar as informações? Que outros trechos de código SQL seriam úteis para diagnosticar o problema?
editar: O uso de memória também é muito alto - cerca de 80-90%. Na verdade, outro servidor está enfrentando o mesmo problema ao mesmo tempo, acredito que ambos estejam hospedados em um servidor citrix.
Também fizemos uma reconstrução de índice.
Sugiro dar uma olhada em um e-book gratuito Red Gate publicado aqui: Performance Tuning with SQL Server Dynamic Management Views . É gratuito e uma boa leitura. Ele apontará os DMVs que fornecem dados cumulativos versus ponto no tempo (o que está atualmente no buffer). Contanto que o servidor não tenha sido reinicializado, você estará em boas condições para capturar algumas boas informações.
Você também pode usar
sp_whoisactive
que fornecerá muito mais informações se puder executá-lo durante as horas indicadas. Retorna o uso de CPU, memória e E/S de cada consulta. Você pode até mesmo puxar o plano de execução da consulta ofensiva também.Faça uma pesquisa básica no Bing/Google para SQL Server DMV e consultas de alta CPU ou algo provavelmente trará alguns outros bons scripts/postagens de blog sobre como pesquisar sua situação específica.
Apenas uma observação sobre seu comentário sobre a movimentação dos relatórios programados. Também analisaria relatórios ad hoc sobre aqueles que os usuários podem executar por conta própria. Especialmente se você estiver executando o SSRS no mesmo servidor que o mecanismo de banco de dados. Normalmente, dou uma olhada na tabela ExecutionLog no banco de dados do SSRS (nome padrão ReportServer). Há uma riqueza de informações sobre o tempo de execução e o tempo de renderização dos relatórios.
Eu usaria select * from sys.dm_exec_requests para ver quais solicitações são executadas nos bancos de dados. Você verá tipos de espera, recursos de espera, etc. Ele fornecerá mais informações do que sp_who2. O alto uso da CPU pode ser causado por vários motivos, como: