Pergunta

Estamos tendo tempos limite de consulta aleatórios e esporádicos em nosso cluster do SQL Server 2005.Possuo alguns aplicativos que o utilizam, então estou ajudando na investigação.Ao observar a% de tempo de CPU no velho Perfmon normal, você certamente pode vê-lo se estabilizando.No entanto, o monitor de atividade SQL fornece apenas o tempo cumulativo de CPU e E/S usado por um processo, e não o que ele está usando naquele momento ou durante um período de tempo específico.Talvez eu pudesse usar o criador de perfil e executar um rastreamento, mas esse cluster é muito usado e temo que estaria procurando uma agulha em um palheiro.Estou latindo para a árvore errada?

Alguém tem bons métodos para rastrear consultas/processos caros neste ambiente?

Foi útil?

Solução

Isso fornecerá as 50 principais instruções por tempo médio de CPU. Verifique aqui outros scripts: http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

SELECT TOP 50
        qs.total_worker_time/qs.execution_count as [Avg CPU Time],
        SUBSTRING(qt.text,qs.statement_start_offset/2, 
            (case when qs.statement_end_offset = -1 
            then len(convert(nvarchar(max), qt.text)) * 2 
            else qs.statement_end_offset end -qs.statement_start_offset)/2) 
        as query_text,
        qt.dbid, dbname=db_name(qt.dbid),
        qt.objectid 
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY 
        [Avg CPU Time] DESC

Outras dicas

Eu encontrei o Relatórios do painel de desempenho para ser muito útil.Eles são um conjunto de relatórios RS personalizados fornecidos pela Microsoft.Você só precisa executar o instalador no PC cliente e, em seguida, executar o setup.sql na instância do SQL Server.

Depois disso, clique com o botão direito em um banco de dados (não importa qual) no SSMS e vá em Relatórios -> Relatórios Personalizados.Navegue e selecione performance_dashboard_main.rdl que está localizado na pasta \Program Files\Microsoft SQL Server\90 ools\PerformanceDashboard por padrão.Você só precisa fazer isso uma vez.Após a primeira vez, ele aparecerá na lista de relatórios.

A visualização do painel principal mostrará a utilização da CPU ao longo do tempo, entre outras coisas.Você pode atualizá-lo ocasionalmente.Ao ver um pico, basta clicar na barra do gráfico para obter os dados detalhados por trás dele.

Usamos Quest's Holofote produtos.Obviamente, é um investimento de tempo e dinheiro, por isso pode não ajudá-lo no curto prazo, mas se você tiver um ambiente SQL grande, é bastante útil.

Como diz Yaakov, execute o profiler por alguns minutos sob carga normal e salve os resultados em uma tabela que permitirá executar consultas nos resultados, tornando muito mais fácil detectar qualquer consulta que consuma muitos recursos.

O Profiler pode parecer uma abordagem de “agulha em um palheiro”, mas pode revelar algo útil.Tente executá-lo por alguns minutos enquanto os bancos de dados estão sob carga normal e veja se alguma consulta se destaca por consumir muito tempo ou consumir recursos de alguma forma.Embora uma situação como essa possa apontar para algum problema geral, também pode estar relacionada a algum problema específico com um ou dois sites, que bagunçam as coisas o suficiente em determinadas circunstâncias para causar um desempenho muito ruim em todos os níveis.

Execute o Profiler e filtre consultas que exigem mais do que um determinado número de leituras.Para o aplicativo em que trabalhei, qualquer consulta sem relatório que levasse mais de 5.000 leituras merecia uma segunda olhada.Seu aplicativo pode ter um limite diferente, mas a ideia é a mesma.

Este utilitário por Erland Sommarskog é extremamente útil.

É um procedimento armazenado que você adiciona ao seu banco de dados.Execute-o sempre que quiser ver quais consultas estão ativas e obter uma boa imagem de bloqueios, bloqueios, etc.Eu o uso regularmente quando as coisas parecem confusas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top