Atualmente, estou estudando para o SQL 70-433 (o exame de certificação da Microsoft) e estou ficando muito confuso sobre a métrica de desempenho "custo de consulta".
De acordo com qualquer documentação que eu pudesse encontrar via Google, o custo da consulta é um valor percentual e representa a porcentagem de todo o lote ocupado por qualquer parte dele. Isso já me pareceu um pouco estranho, pois estou interessado no mérito absoluto de uma consulta específica, e não no mérito relativo a outras consultas que aparecem ao lado.
Mas então pensei: talvez o que você deva fazer seja colocar duas consultas alternativas lado a lado, executá-las como "um lote" e, em seguida, a que tiver um custo menor que 50% será a vencedora.
Mas a discussão sobre o custo da consulta no capítulo 6, lição um do SQL 70-433 Training Kit da Microsoft não parece ter relação alguma com isso.
Aqui está um exemplo: Eles mostram uma consulta contendo duas subconsultas correlacionadas e, em seguida, aprimoram-na substituindo as subconsultas por uma APLICAÇÃO EXTERNA. O resultado: "Esta consulta tem um custo de aproximadamente 76, enquanto o custo da primeira consulta foi o dobro, cerca de 151". Eles melhoram ainda mais a consulta e reduzem o custo de 76 para 3,6. Eles não implicam que esses números sejam porcentagens, enquanto que eles são absolutos que se relacionam à consulta como um objeto independente, sem referência a outras consultas. De qualquer forma, como a primeira consulta poderia ter um custo de 151%?
Mais adiante neste capítulo, eles mostram uma captura de tela de um plano de execução com três partes. O primeiro diz "Custo: 0%", o segundo diz "Custo: 1%" e o último diz "Custo: 99%", mas o texto (do livro em si) abaixo da captura de tela "O custo desta consulta é 0,56" . Suponho que eles significam algum outro tipo de custo, mas não consigo encontrar referência a ele em nenhum outro lugar.
Alguém pode ajudar? Estou completamente confuso.
Respostas:
O custo da consulta é relatado nos planos de execução como "custo estimado da subárvore". Esta é uma figura absoluta como
1.5
. Conor Cunningham mencionou em uma apresentação do SQLBits que originalmente se referia ao número de segundos necessários para executar em uma máquina específica de um funcionário da Microsoft ( "Nick's Machine" ) nos 7 dias do SQL Servermas agora deve ser interpretado como uma medida sem custo do custo total.
O plano de execução é uma árvore. Cada iterador na árvore recebe um custo estimado da CPU e um custo estimado de IO, e estes são adicionados para obter o custo geral (as ponderações relativas podem ser ajustadas com alguns comandos DBCC não documentados ). O custo estimado da subárvore inclui o custo do próprio iterador e de todos os seus descendentes. Para ver um exemplo das fórmulas de cálculo de custos usadas, consulte este artigo .
Para determinar o custo estimado de uma consulta inteira no SSMS, selecione o iterador raiz (por exemplo, o
SELECT
iterador) à esquerda do plano gráfico e observe essa métrica na janela de propriedades do SSMS.Ao executar várias consultas (no mesmo lote ou não), a porcentagem é calculada somando todos esses valores e calculando a porcentagem conforme o esperado.
Você deve estar ciente de que, mesmo nos planos de execução reais, esse valor de custo é baseado em estimativas, e usá-lo para comparar os méritos relativos de duas consultas diferentes pode ser lamentavelmente errado nos casos em que as estimativas são imprecisas.
fonte