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的集合,所以我想我有几个问题:
有没有明确的来源来解释这项措施的含义?
人们使用什么其他"查询性能"指标,它们的相对优点是什么?
值得注意的是,这是一个中型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
探查器跟踪将其置于透视中.
查询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)
归档时间: |
|
查看次数: |
89208 次 |
最近记录: |