您的位置:首页 > 数据库 > 数据库管理

查看IO量大的SQL语句及它们的执行计划

更多 2014/12/27 来源:数据库管理学习浏览量:1515
学习标签: SQL Server
本文导读:SQL Server中统计IO是一个session选项。它返回域当前执行的语句相关的I/O信息,从IO输出信息中我们可以看到在执行计划中有多少次获取表(Scan count);多少次读取缓存(logical reads);多少次读取硬盘(physical reads );多少次读取大的对象(lob physical reads)。

SET STATISTICS IO 使 SQL Server 显示有关由 Transact-SQL 语句生成的磁盘活动量的信息。

例如

扫描计数 1,逻辑读取 503 次,物理读取 2 次,预读 534 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 

查看IO量大的SQL语句及它们的执行计划的方法

 

 
SQL 代码   复制

select top 50 
    (total_logical_reads/execution_count) as avg_logical_reads,
    (total_logical_writes/execution_count) as avg_logical_writes,
    (total_physical_reads/execution_count) as avg_phys_reads,
     Execution_count, 
    statement_start_offset as stmt_start_offset, statement_end_offset as stmt_end_offset,
substring(sql_text.text, (statement_start_offset/2), 
case 
when (statement_end_offset -statement_start_offset)/2 <=0 then 64000
else (statement_end_offset -statement_start_offset)/2 end) as exec_statement,  sql_text.text,plan_text.*
from sys.dm_exec_query_stats  
cross apply sys.dm_exec_sql_text(sql_handle) as sql_text
cross apply sys.dm_exec_query_plan(plan_handle) as plan_text
order by 
 (total_logical_reads + total_logical_writes) /Execution_count Desc

 

收藏
366
很赞
218