直接执行如下SQL查询:

SELECT TOP 20

    total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
    qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
    last_execution_time AS [最后一次执行时间],max_worker_time /1000 AS [最大执行时间(ms)],
    SUBSTRING(qt.text,qs.statement_start_offset/2+1, 
        (CASE WHEN qs.statement_end_offset = -1 
        THEN DATALENGTH(qt.text) 
        ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) 
    AS [使用CPU的语法], qt.text [完整语法],
    dbname=db_name(qt.dbid),
    object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1

ORDER BY  total_worker_time DESC

其中[使用CPU的语法] 是指具体耗时较长的SQL。如果耗时长的SQL在存储过程中,ObjectName 是存储过程的名称。dbname是对应的数据库。

上述的排序是根据总耗时,total_worker_time来进行排序。如果是针对具体的SQL语句(忽略执行次数),可以根据 [平均消耗CPU 时间(ms)] 来进行排序,更准确的找到应该优化的SQL。

更多推荐

SQLServer 查看耗时较多的SQL语句