Estou investigando problemas de desempenho para um procedimento armazenado no servidor SQL 2005. É assim que pretendo fazer:
- Analise o procedimento armazenado para quaisquer práticas ruins de TSQL (como contagem * etc)
- Execute-o através do DTA
- Estude o plano de consulta estimado do procedimento armazenado
Encontre o plano em cache executando este código no banco de dados:
SELECT deqp.dbid , deqp.objectid , deqp.encrypted , deqp.query_plan FROM sys.dm_exec_query_stats deqs CROSS APPLY sys.dm_exec_query_plan(deqs.plan_handle) AS deqp WHERE objectid = OBJECT_ID('procedurename', 'p') ;
- Encontre os índices relacionados (não sei como) e verifique o uso
- Tente encontrar quaisquer índices ausentes
De que outra forma devo fazer isso? Comentários são realmente apreciados.
desde já, obrigado
Coisas como select count(*) funcionam bem desde que a cláusula where seja indexada corretamente.
O DTA pode ou não ser útil.
O plano real e estimado é o que você precisa observar. Ele dirá se há algum índice ausente. Os índices que serão utilizados estarão no plano de execução.
Primeiras coisas primeiro: se você está investigando problemas de desempenho para um procedimento armazenado, você deve ter uma linha de base de chamadas de procedimento e também uma lista de chamadas que superam o desempenho desejado (também algumas estatísticas necessárias: quantas chamadas por dia, quantos muitos estão OK vs quantos estão lentos...etc).
Isso pode ser feito mais facilmente com traços. Portanto, antes de iniciar a investigação, sugiro que você tenha/faça rastreamentos dessas chamadas de procedimento específicas e não apenas, também uma imagem da carga completa no sistema, porque é bastante natural que um procedimento enlouqueça quando há um trabalho em lote que é matando o sistema.
Se você ainda não possui todas essas informações, leia as seguintes perguntas relacionadas ao Profiler e aos rastreamentos do servidor:
Depois disso, você deve começar a investir tempo no ajuste, lendo o plano de execução (também pode ser salvo em traces) e tentando reescrever seu código.