Se eu tiver uma consulta que retorne um query_plan, por exemplo, assim:
SELECT TOP 1000 st.TEXT
,cp.size_in_bytes
,cp.plan_handle
,QP.query_plan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS QP
WHERE cp.objtype = N'Adhoc'
AND cp.usecounts = 1
Em seguida, posso clicar em um query_plan e passar o mouse sobre o ícone mais à esquerda, onde o texto da dica listará o custo estimado da subárvore.
Existe uma maneira de obter isso Estimated Subtree Cost
como uma coluna separada para minha consulta?
Entendo que o número não tem unidade e se refere a um determinado PC de desenvolvedor há cerca de 20 anos. Mesmo assim, acho que pode me dizer quanto tempo a consulta deve levar se as estatísticas não estiverem muito distantes.
Eu tentei muito pesquisar essas informações no Google, mas até mesmo dba.stackexchange.com está vazio.
Acredito que você terá que fazer algum trabalho de consulta XML para obter esse custo estimado.
Veja se é isso que você procura:
Isso retornará o custo de extratos individuais dentro de um lote. Você pode precisar trabalhar em algum agrupamento se precisar do custo total estimado da subárvore para todo o lote.
Aqui está como eu usei a resposta à minha pergunta.
Sou um grande fã de sp_whoisactive. Se você não tem isso, pare de ler; baixe aqui .
Então, configurei para coletar um instantâneo a cada 10 minutos, assim:
Deixei rodar por um tempo (até 3 dias). Então eu converto os dados coletados assim:
E, finalmente, obtenho uma lista que mostra onde o custo estimado é pequeno em comparação com o tempo de execução, sem que o trabalho seja bloqueado
É uma lista muito interessante , mas vem com um pouco de ruído. Para começar, optei por ignorar pequenos trabalhos rápidos que duram menos de 10 minutos, mas esse limite depende da sua situação.
Agora é muito mais fácil encontrar trabalhos executados com um plano ruim.
Muito obrigado pela sua ajuda.