每个数据库运行时查询最长

时间:2009-08-10 17:33:17

标签: sql sql-server sql-server-2005

我正在使用它:

SELECT 
    *
FROM 
    sys.dm_exec_query_stats s
    CROSS APPLY sys.dm_exec_sql_text( s.sql_handle ) t
ORDER BY
    s.max_elapsed_time DESC

在服务器级别上获得运行时间最长的查询。

如何为每个数据库获取运行时间最长的查询?我想一次只关注一个数据库。

3 个答案:

答案 0 :(得分:7)

sys.dm_exec_query_stats的BOL条目提及sys.dm_exec_query_plan

SELECT *
FROM
    sys.dm_exec_query_stats s
    CROSS APPLY
    sys.dm_exec_sql_text( s.sql_handle ) t
    CROSS APPLY
    sys.dm_exec_query_plan(s.plan_handle) foo
WHERE
    foo.dbid = DB_ID('My_DB')
ORDER BY
    s.max_elapsed_time DESC

编辑:我没试过。我一般担心服务器负载...

答案 1 :(得分:0)

SELECT * FROM database1.dbo.table JOIN database2.dbo.table

上面的查询在哪个数据库中运行?如果执行时的当前上下文是database3怎么办?如果它在database4中执行一次而在database5中执行一次怎么办?

这个想法是执行计划不依赖于数据库。

答案 2 :(得分:0)

听起来你正试图调整数据库。您运行时间最长的查询可能不是最昂贵的查询,也可能是您最受益的查询。

您应该阅读SQL Server Profiler以识别使用最多资源并对其进行处理的查询。