将SQL STATISTICS TIME和IO捕获到表中

时间:2010-06-05 11:10:59

标签: sql-server tsql

有没有办法在T-SQL中捕获STATISTICS IOTIME,以便登录表?

3 个答案:

答案 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。我现在无法研究它。)