sql-server – 获取“set statistics io on”会导致t-sql进行调优

我想为涉及许多存储过程的复杂过程添加监视功能.

在某些情况下,我想捕获单个语句产生的逻辑读取数.

换句话说,我想打开set statistics io on,访问(并将结果保存到日志表中)通常在“messages”选项卡中显示在SSMS中.

我看到它可以在.Net中使用SqlInfoMessageEventHandler完成.我确信它也可以在T-SQL中完成,但我还没有找到它.

谢谢!

sys.dm_exec_requests中的Logical_reads也没有增加……

对我来说,完美的解决方案是以某种方式捕获“set statistics io on”信息:

select name, id
    from   sysobjects
    union all 
    select name,id
    from   sysobjects  ;


(120 row(s) affected)
Table 'sysschobjs'. Scan count 2, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

最佳答案 一种方法是使用
dynamic management views,可在2008年及以后使用.例如,要确定查询完成的读取次数,您可以:

declare @start_reads bigint
select @start_reads = reads from sys.dm_exec_requests where session_id = @@spid

-- Your query here 

select reads - @start_reads from sys.dm_exec_requests where session_id = @@spid

基本上有两种类型的计数器:

> _session_视图具有在当前批次完成后递增的计数器.
> _exec_计数器从0开始并在批处理运行时递增.

点赞