欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

利用SQL命令分析SQL语句的性能及执行时间

创建时间:2011年11月12日 15:34  阅读次数:(7723)
分享到:
SQL语句执行的慢了,我们除了可以从SQL的执行计划上分析SQL的效率外,相关内容请查看本站以下文章:
利用showplan_all查看sql详细执行计划
SQL Server性能调优之执行计划深度剖析
我们是不是还可以输出更加详细的执行清单呢?本章我们就讨论如果利用SQL命令来输出更加详细的SQL执行明细:

我们知道,sql server在每次执行sql命令后,都会将该命令放入缓冲区,以便下次更加高效的调用该命令,所以,在测试前,我们要用DROPCLEANBUFFERS命令来删除所有缓冲数据,以便测试出后续的SQL执行情况。
从缓冲池中删除所有清除缓冲区命令:
DBCC DROPCLEANBUFFERS


除了清除缓冲区所有的命令,还要清空缓存下来的所有执行计划,我们都知道,SQL SERVER2005为我们的每条SQL语句都会生成一个执行计划,为了避免sql server使用了错误的执行计划,我们在测试前应该清除所有缓存起来的执行计划,清除所有执行计划的语句:
DBCC FREEPROCCACHE


清空了sql中所有的缓存数据后,我们要开始测试sql语句了。先来了解两个命令:
1,SET STATISTICS IO { ON | OFF }
该命令使SQL Server显示有关由Transact-SQL语句生成的磁盘活动量的信息。如果将此选项设置为ON,则所有后续的Transact-SQL语句将返回统计信息,直到将该选项设置为OFF为止。

2,SET STATISTICS TIME { ON | OFF }
显示分析、编译和执行各语句所需的毫秒数。当SET STATISTICS TIME为ON时,会显示语句的时间统计信息。为OFF时,不显示时间统计信息。

好了,综合上面的信息,我们开始测试select * from v_Produce_ReqGoodsDetail语句的执行明细.
命令:
dbcc dropcleanbuffers
dbcc freeproccache

set statistics io on 
set statistics time on 
go 
select * from v_Produce_ReqGoodsDetail
go 
set statistics io off 
set statistics time off


输出结果:
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

SQL Server 分析和编译时间:  CPU 时间 = 15 毫秒,占用时间 = 256 毫秒。

(108 行受影响)
表 '视图中用到的表名'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 0,逻辑读取 622 次,物理读取 1 次,预读 56 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 0,逻辑读取 8 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 1,逻辑读取 217 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 1,逻辑读取 217 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 1,逻辑读取 324 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 0,逻辑读取 216 次,物理读取 2 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 0,逻辑读取 216 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 1,逻辑读取 4 次,物理读取 1 次,预读 8 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 1,逻辑读取 2 次,物理读取 2 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 1,逻辑读取 2 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '视图中用到的表名'。扫描计数 14,逻辑读取 29 次,物理读取 2 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间: CPU 时间 = 16 毫秒,占用时间 = 111 毫秒。
SQL Server 分析和编译时间:  CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

解释一下输出结果:
cpu时间:这个语句占用的处理器时间.
占用时间:除了cpu要用时间外,存储器中的数据存取,磁盘IO,总线上的等待等等,占用时间就是为执行该SQL语句所用的总共时间. 

逻辑读取:从数据缓存读取的页数
物理读取::从磁盘读取的页数
预读:为进行查询而放入缓存的页数
lob 逻辑读取:从数据缓存读取的 text、ntext、image 或大值类型 (varchar(max)、nvarchar(max)、varbinary(max)) 页的数目。
lob物理读取:从磁盘读取的 text、ntext、image 或大值类型页的数目。
lob预读:为进行查询而放入缓存的 text、ntext、image 或大值类型页的数目。

到此为止,我们就可以从以上的输出结果中很好的分析出我们的SQL命令的性能情况了。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 57+89=? 的结果(结果是:146)
结  果: