Sql server 获得;将统计信息io设置为“开”;在t-sql中进行调优的结果
我想将监视功能添加到涉及许多存储过程的复杂流程中。 在某些情况下,我希望捕获单个语句生成的逻辑读取数 换句话说,我想打开Sql server 获得;将统计信息io设置为“开”;在t-sql中进行调优的结果,sql-server,performance,tsql,io,statistics,Sql Server,Performance,Tsql,Io,Statistics,我想将监视功能添加到涉及许多存储过程的复杂流程中。 在某些情况下,我希望捕获单个语句生成的逻辑读取数 换句话说,我想打开设置统计io,访问(并将结果保存到日志表)SSMS中“消息”选项卡中通常显示的内容 我看到它可以在.Net中使用SqlInfoMessageEventHandler完成。我确信它也可以在T-SQL中完成,但我还没有找到它 谢谢 sys.dm_exec_请求中的逻辑_读取也没有增加 对我来说,完美的解决方案是以某种方式捕获“设置统计io on”信息: select name,
设置统计io,访问(并将结果保存到日志表)SSMS中“消息”选项卡中通常显示的内容
我看到它可以在.Net中使用SqlInfoMessageEventHandler完成。我确信它也可以在T-SQL中完成,但我还没有找到它
谢谢
sys.dm_exec_请求中的逻辑_读取也没有增加
对我来说,完美的解决方案是以某种方式捕获“设置统计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.
一种方法是使用,可在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
基本上有两种类型的计数器:
\u会话
视图中的计数器在当前批处理完成后递增李>
- 批处理运行时,
\u exec\u
计数器从0开始递增
谢谢!看起来方向正确,但我这里有两个问题:1。“读取”列未被更新。也许这里只暴露了物理读数?2.当我在两个表之间进行连接时,“set statistics io”选项显示引擎对每个表进行的逻辑读取次数。您建议的技术不会公开此类信息。是的,尤其是如果您运行两次查询,它将被缓存,并且不需要进行读取。您可以改为检查cpu\u time
,但要确保查询使用了可测量的cpu量。对于逻辑读取,请检查logical\u reads
列。