SQL Server报告性能-按总CPU时间列出的排名靠前的查询-包括哪些内容

vuktfyat  于 2023-02-03  发布在  SQL Server
关注(0)|答案(3)|浏览(148)

我试图通过插入查询来评估sql server 2008/2016的负载水平。
我发现有一些文章讨论了这个问题,比如:http://use-the-index-luke.com/sql/dml/insert,讨论执行时间。
我不太精通sql server,例如,不知道如何评估执行计划。
我知道这是很方便的性能报告,比如“性能-按总CPU时间排列的顶级查询”。
我搜索了一下,没有找到这些报告的定义。
因此,问题是-此报告将哪些服务器任务包括在查询的CPU时间计算中,即
1.索引重新计算?
1.甚至执行触发器
1.还有别的吗?
谢谢大家!

mdfafbf1

mdfafbf11#

这些是MDW或管理数据仓库报告,特别是SQL Server 2008中引入的查询统计历史记录。如果您对收集此数据感兴趣,请启用和Configure the Management Data Warehouse
What are these reports anyway.
默认情况下,只有前10个查询才会包含在Top 10 Queries by CPU中,但是,您可以模拟报告背后的查询,并使用类似于本article中讨论的查询来调整所需的结果。

SELECT TOP X
    qs.total_worker_time/(qs.execution_count*60000000) as [Minutes Avg CPU Time],    
    qs.execution_count as [Times Run],
    qs.min_worker_time/60000000 as [CPU Time in Mins],
    SUBSTRING(qt.text,qs.statement_start_offset/2,
    (case when qs.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2
     else qs.statement_end_offset end -qs.statement_start_offset)/2) as [Query Text],
    db_name(qt.dbid) as [Database],
    object_name(qt.objectid) as [Object Name]
FROM sys.dm_exec_query_stats qs cross apply
     sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY [Minutes Avg CPU Time] DESC
dfddblmv

dfddblmv2#

索引重新计算和触发器执行不作为查询的一部分执行。索引更新是维护活动的一部分,触发器执行是插入/更新/删除活动的一部分。
一般来说,“顶级查询”报表的计算中不包含“服务器任务”。查询执行计划基于该查询和查询编译开始时可用的数据统计信息。生成的计划与服务器上进行的维护或IUD活动无关。
其他活动可能会导致实际持续时间增加,但额外的时间并不直接归因于查询。查询只是被强制等待其他活动完成。
有帮助吗?

ddrv8njm

ddrv8njm3#

这是一个修改后的查询,它显示了最大的CPU时间消耗者。它不是平均值,而是汇总值。它还按query_plan_hash分组,因此具有不同参数的相同查询将位于一个组中。

**注1:**如果查询运行频繁(每秒约1次),则其统计信息将每小时刷新一次。
**注意2:**如果此时仅运行查询,则用户名将存在
**注3:**如果您需要长时间保存统计数据,您需要将其单独存储在某个地方。此外,添加按日期分组将有助于报告

SELECT TOP 10
 SUM(qs.total_worker_time)/(1000000) AS [CPU Time Seconds],    
 SUM(qs.execution_count) AS [Times Run],    
 qs.query_plan_hash AS [Hash],
 MIN(creation_time) AS [Creation time],
 MIN(qt.text) AS [Query],
 MIN(USER_NAME(r.user_id)) AS [UserName]
FROM sys.dm_exec_query_stats qs CROSS apply
 sys.dm_exec_sql_text(qs.sql_handle) AS qt   
 LEFT JOIN sys.dm_exec_requests AS r ON qs.query_plan_hash = 
r.query_plan_hash
GROUP BY qs.query_plan_hash
ORDER BY [CPU Time Seconds] DESC

相关问题