代码之家  ›  专栏  ›  技术社区  ›  TonyP

将SQL统计时间和IO捕获到表中

  •  4
  • TonyP  · 技术社区  · 15 年前

    有什么方法可以捕捉 STATISTICS IO TIME 在T-SQL中,用于登录到表?

    3 回复  |  直到 7 年前
        1
  •  4
  •   Oreo    7 年前

    某种程度上。

    统计数字与 SET STATISTICS TIME 由查询统计数据DMV捕获: sys.dm_exec_query_stats .

    可以从T-SQL查询DMV,就像普通视图一样。

    然而, SET STATISTICS IO 只捕获为每次执行的聚合值(最后一次逻辑读取、最后一次物理读取),而不区分每个行集 设置统计信息IO .

    但总体而言,DMV的作用与 设置统计信息IO .

        2
  •  2
  •   Mitch Wheat    15 年前

    不,不使用 SET STATISTICS IO ON .

    但您不需要;运行SQL事件探查器并启动跟踪以输出到文件。包括读取和持续时间。

        3
  •  0
  •   Karl    12 年前

    再加上@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 用于特定查询。我现在无法研究。)