You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL脚本以获取特定数据库的最耗费资源查询?

针对单个数据库筛选高资源消耗SQL的修改方案

没问题,我来帮你调整这个脚本,让它只聚焦你指定的单个数据库。

原脚本是从sys.dm_exec_query_stats这个跨库的动态管理视图(DMV)获取数据,所以我们只需要加一个过滤条件,匹配目标数据库的标识即可。

修改后的完整脚本

SELECT TOP 100 
    SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, 
        ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.TEXT) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) as query, 
    qs.execution_count, 
    qs.total_logical_reads, 
    qs.last_logical_reads, 
    qs.total_logical_writes, 
    qs.last_logical_writes, 
    qs.total_worker_time, 
    qs.last_worker_time, 
    qs.total_elapsed_time/1000000 total_elapsed_time_in_S, 
    qs.last_elapsed_time/1000000 last_elapsed_time_in_S, 
    qs.last_execution_time, 
    qp.query_plan 
FROM sys.dm_exec_query_stats qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 
-- 关键过滤条件:指定目标数据库
WHERE qt.dbid = DB_ID('你的目标数据库名称') -- 替换成你要查询的数据库名
ORDER BY qs.total_worker_time DESC -- CPU time

关键修改说明

  • qt.dbid:sys.dm_exec_sql_text返回的字段,代表这条SQL所属的数据库ID
  • DB_ID('你的目标数据库名称'):这个函数会返回你指定数据库的ID,用ID匹配比字符串比较更高效
  • 如果你觉得用数据库名更直观,也可以把WHERE条件改成:WHERE DB_NAME(qt.dbid) = '你的目标数据库名称',效果完全一致

注意事项

  • 确保你拥有VIEW SERVER STATE权限,否则无法访问这些DMV
  • 对于跨库查询或者临时SQL(比如在tempdb中执行的),如果其核心逻辑不属于目标数据库,可能不会被筛选出来,这符合我们只看指定库的需求

内容的提问来源于stack exchange,提问作者Varda Elentári

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:30:59