2013-02-26 21 views
0

使用此查詢,我得到了Sql Server中前10個緩慢的查詢。獲取Sql Server 2012中查詢的最後10個執行時間

SELECT TOP 20 
    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), 
    qs.execution_count, 
    qs.total_logical_reads, qs.last_logical_reads, 
    qs.min_logical_reads, qs.max_logical_reads, 
    qs.total_elapsed_time, qs.last_elapsed_time, 
    qs.min_elapsed_time, qs.max_elapsed_time, 
    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.encrypted = 0 
ORDER BY 
    qs.total_logical_reads DESC 

我想要做的是查找每個查詢最後10個執行時間。 或者一天的平均執行時間讓我很高興。

回答

0

您可以在特定的時間段創建數據庫過程執行的快照,然後您可以比較它們。使用sql爲了將每個快照插入到表中。

SELECT 
     getDAte() as SnapshotDate, 
     s.database_id, 
     s.[plan_handle], 
     s.[object_id], 
     s.last_execution_time, 
     s.execution_count, 
     s.total_worker_time, 
     s.last_worker_time, 
     s.min_worker_time, 
     s.max_worker_time, 
     s.total_physical_reads, 
     s.last_physical_reads, 
     s.min_physical_reads, 
     s.max_physical_reads, 
     s.total_logical_writes, 
     s.last_logical_writes, 
     s.min_logical_writes, 
     s.max_logical_writes, 
     s.total_logical_reads, 
     s.last_logical_reads, 
     s.min_logical_reads, 
     s.max_logical_reads, 
     s.total_elapsed_time, 
     s.last_elapsed_time, 
     s.min_elapsed_time, 
     s.max_elapsed_time 

FROM sys.dm_exec_procedure_stats AS s 
WHERE s.database_id NOT IN 
          (
          DB_ID('master'), 
          DB_ID(N'tempdb'), 
          DB_ID(N'model'), DB_ID(N'msdb'), 
          32767 -- RESOURCE db 

         ) ; 
相關問題