【发布时间】:2015-12-09 15:39:32
【问题描述】:
我需要运行一个查询来提取用户查询历史以确定长时间运行的查询。该信息将每 5-10 分钟提取一次,并存储在一个表中,以便每周报告运行一次,以显示前 10 个运行时间最长的查询。
我能够找到以下查询,然后添加“SYS.DM_EXEC_SESSIONS”,这似乎返回了我需要的内容。但是,它似乎不是历史,而只是活动会话。我肯定需要用户名、主机名和数据库作为结果集的一部分。
SELECT
r.session_id
, s.login_name
, s.host_name
, r.start_time
, TotalElapsedTime_ms = r.total_elapsed_time
, r.[status]
, s.program_name
, r.command
, DatabaseName = DB_Name(r.database_id)
, r.cpu_time
, r.reads
, r.writes
, r.logical_reads
, t.[text] AS [executing batch]
, SUBSTRING(
t.[text], r.statement_start_offset / 2,
( CASE WHEN r.statement_end_offset = -1 THEN DATALENGTH (t.[text])
ELSE r.statement_end_offset
END - r.statement_start_offset ) / 2
) AS [executing statement]
FROM
sys.dm_exec_requests r
LEFT OUTER JOIN
sys.dm_exec_sessions s
ON
r.session_id = s.session_id
CROSS APPLY
sys.dm_exec_sql_text(r.sql_handle) AS t
CROSS APPLY
sys.dm_exec_query_plan(r.plan_handle) AS p
ORDER BY
r.total_elapsed_time DESC;
到目前为止,我能够从SYS.DM_EXEC_SESSIONS 中提取会话信息,但我似乎找不到任何可以链接到查询统计信息的视图。数据库是 SQL Server 2012 SP1。
任何指导/帮助将不胜感激。
谢谢, 弗兰克
【问题讨论】:
标签: sql sql-server