有没有办法在T-SQL中捕获STATISTICS IO
和TIME
,以便登录表?
答案 0 :(得分:4)
排序。
查询统计信息DMV捕获与SET STATISTICS TIME
给出的统计信息相同的统计信息:sys.dm_exec_query_stats
。
可以从T-SQL查询DMV,就像普通视图一样。
但是,SET STATISTICS IO
仅在每次执行时被捕获为聚合值(last_logical_reads,last_physical_read),而没有由SET STATISTICS IO
给出的区分每行集。
总的来说,DMV可以起到与SET STATISTICS IO
相同的作用。
答案 1 :(得分:2)
不,不使用SET STATISTICS IO ON
。
但是你不需要;运行SQL事件探查器并启动跟踪以输出到文件。包括阅读和持续时间。
答案 2 :(得分:0)
添加@Remus Rusanu所说的内容 - 然后很容易将elapsed_time
捕获到表中(一旦你知道了查询句柄)。
例如:
CREATE TABLE #times (
MS BIGINT
);
INSERT INTO #times
SELECT total_elapsed_time
FROM sys.dm_exec_query_stats
WHERE sql_handle = 0x02000000DEE9FC09E552D1E33008EED4E8732B21E171EC160000000000000000000000000000000000000000;
如果total_elapsed_time
只返回了几行(因此只有几个缓存的查询),您可以查看total_rows
列并找到包含查询返回的行数的句柄你想要时间。然后将句柄传递给此DMO以查看查询的文本以及它是否与您想要的时间匹配:
SELECT *
FROM sys.dm_exec_sql_text (0x02000000DEE9FC09E552D1E33008EED4E8732B21E171EC160000000000000000000000000000000000000000) ;
(希望其他人会加入这个并告诉我们一个更健壮的方法来获取特定查询的query_handle
。我现在无法研究它。)