As porcentagens de custo neste plano do SQL Server são superiores a 100% por um motivo válido?

13

Estou olhando através do cache do plano, procurando por frutos de otimização pendentes e me deparei com este trecho:

insira a descrição da imagem aqui

Por que muitos dos custos listados estão acima de 100%? Isso não deveria ser impossível?

Max Vernon
fonte
Eu até vi custos de até 1 milhão de% do plano estimado. Basta usar o custo real, deve ser melhor.
Marian
5
Porque a matemática do SQL Server está bagunçada. Pegue nosso Plan Explorer gratuito ; nós não temos esse problema.
Aaron Bertrand
Adoro o SQL Sentry Plan Explorer, Aaron - já o uso há algum tempo. Eu quero ver o que a versão pro faz!
Max Vernon

Respostas:

12

O estimador de custo visual é uma porcaria. Esse tipo de coisa acontece o tempo todo. Basta ir com os mais altos, os mais caros e atacar os primeiros.

mrdenny
fonte
Você já viu isso nas versões anteriores do SQL Server? Para mim, nunca o notei no SS 2008R2, por exemplo.
KookieMonster
5
Eu já vi isso desde o SQL 2000. Até onde eu sei, é apenas um bug no SSMS (e EM) quando está fazendo as contas para calcular as porcentagens.
mrdenny
2

Também fiquei curioso para saber por que, às vezes, algum custo é exibido como 100%, 200%, 300% ... e até mais. Depois de analisar o arquivo xml do plano de consulta, eu entendi.

A porcentagem de custo = meu EstimatedTotalSubtreeCost/ nó principalEstimatedTotalSubtreeCost

Por exemplo, os shows do seu plano de consulta Clustered Index Insertcustam 914%, para entender como calcular essa porcentagem, 1. Move mouse to `Clustered Index Insert` to show popup, you can see the cost `EstimatedTotalSubtreeCost`, e.g, 0.2 2. Move mouse to this node's parent node `COND WITH QUERY`, check the popup to get `EstimatedTotalSubtreeCost`, e.g, 0.0218818 3. Calculate 0.2/0.0218818 = 914%, this is the cost percentage displayed in `Clustered Index Insert` popup

osexp2003
fonte
1
0.002/2.18é 0.000917(que é o mesmo que 0.0917%) e não 914%.
ypercubeᵀᴹ
obrigado pelo seu comentário Vou modificar minha resposta. Afinal, é apenas uma amostra para mostrar como calcular a porcentagem.
Osexp2003