Obviamente, ver o plano de execução real é um grande problema ao ajustar, e normalmente eu habilito a saída do plano de consulta SET STATISTICS XML ON
e executo qualquer consulta que precise de algum TLC, mas como posso ver as contagens de registros reais para execuções históricas de um plano ou para um processo que não posso executar facilmente manualmente (ou simular em um ambiente de teste)?
Quando eu puxo essas informações do cache de consulta por meio de uma sys.dm_exec_query_plan
ou sys.dm_exec_text_query_plan
apenas as contagens de linhas estimadas são mostradas. O mesmo comportamento existe ao usar o DMV do Repositório de Consultas, sys.query_store_plan
. Como todos esses DMVs estão puxando planos reais que foram usados, eu esperaria ver as contagens reais de execução de linha incluídas nas representações gráficas do plano, mas elas não estão lá.
As informações retornadas do sys.dm_exec_query_stats
DMV são apenas um pouco úteis, pois retornam contagens totais para a declaração, mas as contagens detalhadas de operadores dentro do plano parecem estar ocultas com planos históricos. Com 2014, conseguimos sys.dm_exec_query_profiles
usar o DMV, o que ajuda nos planos que estão sendo executados, mas isso também não ajuda quando olhamos para execuções históricas.
Essas informações estão armazenadas em outro lugar? Devo tratar as contagens de linhas estimadas como números de contagem real (duvido, mas já que estou perguntando...)? Existe um item de conexão solicitando esse recurso que eu possa votar?
Você não verá as contagens de linhas reais do cache do plano, pois ele armazena planos estimados com contagens de linhas estimadas e valores de parâmetros compilados.
Se você realmente acredita que precisa de contagens de linhas reais para obter uma solução de desempenho, você deve realmente executar a consulta ou rastreá-la usando
Profiler
ouEE
especificamente usando a classe de eventos XML Showplan .