衡量查询效果:"执行计划查询成本"与"拍摄时间"

Mat*_*lie 50 sql sql-server optimization sql-server-2005 sql-execution-plan

我正在尝试确定两个不同查询的相对性能,并且有两种方法可以测量这个:
1.运行两个和每个查询的时间
2.运行两个并从实际执行计划中获取"查询成本"

这是我为查询定时运行的代码...

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
Run Code Online (Sandbox Code Playgroud)

我得到的是以下内容:

Stored_Proc     Execution_Time     Query Cost (Relative To Batch)

test_1a         1.673 seconds      17%
test_1b         1.033 seconds      83%
Run Code Online (Sandbox Code Playgroud)

执行时间的结果直接与查询成本的结果相矛盾,但我很难确定"查询成本"实际意味着什么.我最好的猜测是它是Reads/Writes/CPU_Time/etc的集合,所以我想我有几个问题:

  1. 有没有明确的来源来解释这项措施的含义?

  2. 人们使用什么其他"查询性能"指标,它们的相对优点是什么?


值得注意的是,这是一个中型SQL Server,在MS Server 2003 Enterprise Edition上运行MS SQL Server 2005,具有多个处理器和100多个并发用户.

编辑:

经过一番麻烦后,我设法在该SQL Server上获得了Profiler访问权限,并且可以提供额外的信息(支持查询成本与系统资源相关,而不是执行时间本身...)

Stored_Proc    CPU      Reads    Writes   Duration   

test_1a        1313     3975     93       1386
test_1b        2297     49839    93       1207
Run Code Online (Sandbox Code Playgroud)

令人印象深刻的是,花费更多的CPU以及更多的读取需要更少的时间:)

gbn*_*gbn 36

探查器跟踪将其置于透视中.

  • 查询A:1.3秒CPU,1.4秒持续时间
  • 查询B:2.3秒CPU,1.2秒持续时间

查询B使用并行性:CPU>持续时间,例如查询使用2个CPU,每个平均1.15秒

查询A可能不是:CPU <持续时间

这解释了相对于批处理的成本:17%的更简单的非并行查询计划.

优化器确定查询B更昂贵并且将从并行性中受益,即使这需要额外的努力.

但请记住,查询B使用100%的2 CPUS(因此4个CPU为50%)大约一秒左右.查询A使用100%的单个CPU 1.5秒.

查询A的峰值较低,但代价是持续时间增加.有一个用户,谁在乎?有了100,也许它会有所不同......


小智 14

SET STATISTICS TIME ON

SELECT * 

FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;

SET STATISTICS TIME OFF;
Run Code Online (Sandbox Code Playgroud)

并看到消息选项卡,它将如下所示:

SQL Server Execution Times:

   CPU time = 0 ms,  elapsed time = 10 ms.

(778 row(s) affected)

SQL Server parse and compile time: 

   CPU time = 0 ms, elapsed time = 0 ms.
Run Code Online (Sandbox Code Playgroud)


Qua*_*noi 5

执行时间的结果直接与查询成本的结果相矛盾,但我很难确定"查询成本"实际意味着什么.

Query cost 是优化程序考虑您的查询将花费多长时间(相对于总批处理时间).

优化程序尝试通过查看数据的查询和统计信息,尝试多个执行计划并选择成本最低的计划来选择最佳查询计划.

在这里,您可以更详细地阅读它如何尝试这样做.

正如您所看到的,这可能与您实际获得的内容有很大不同.

当然,唯一真正的查询性能指标是查询实际需要多长时间.


小智 5

使用SET STATISTICS TIME ON

高于您的查询。

在结果选项卡附近,您可以看到一个消息选项卡。在那里你可以看到时间。