Medição do desempenho da consulta: "Custo da consulta do plano de execução" x "Tempo gasto"
stou tentando determinar o desempenho relativo de duas consultas diferentes e tenho duas maneiras de medir isso disponívei
1. Execute ambos e cronometre cada consulta
2. Execute os dois e obtenha "Custo de consulta" no plano de execução real
Aqui está o código que corro para cronometrar as consultas ...
DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1a
SELECT getDate() - @start AS Execution_Time
GO
DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1b
SELECT getDate() - @start AS Execution_Time
GO
O que recebo é o seguinte:
Stored_Proc Execution_Time Query Cost (Relative To Batch)
test_1a 1.673 seconds 17%
test_1b 1.033 seconds 83%
Os resultados do tempo de execução contradizem diretamente os resultados do Custo de consulta, mas estou tendo dificuldade em determinar o que "Custo de consulta" realmente significa. Meu melhor palpite é que é um agregado de Reads / Writes / CPU_Time / etc, então acho que tenho algumas perguntas:
Existe uma fonte definitiva para explicar o que essa medida signific
Quais outras métricas de "Desempenho de consulta" as pessoas usam e quais são seus méritos relativos?
Pode ser importante observar que este é um SQL Server de tamanho médio, executando o MS SQL Server 2005 no MS Server 2003 Enterprise Edition com vários processadores e mais de 100 usuários simultâneo
EDITAR
Depois de algum incômodo, consegui acessar o Profiler no SQL Server e posso fornecer informações extras (que suporta o Custo de Consulta relacionado aos recursos do sistema, não ao próprio Tempo de Execução ...)
Stored_Proc CPU Reads Writes Duration
test_1a 1313 3975 93 1386
test_1b 2297 49839 93 1207
mpressionante que tomar mais CPU com MUITOS mais Leituras leva menos tempo