mssql sqlserver 查询性能分析的方法分享


摘要:
下文讲述sqlserver中查询性能分析的方法,如下所示:
实验环境:sql server 2008 R2


在sqlserver中查询相关的性能,我们通常采用查询sql脚本的运行参数,通过对参数的对比和分析,得出相应的结果,如下所示:
例:

—打开查询分析器:
—输入以下命令,避免由于数据缓存对查询结果产生差异
dbcc dropcleanbuffers –清除数据
dbcc freeproccache –清除缓存
set statistics io on — 统计执行资源消耗
set statistics time on –统计执行时间消耗
—输入sql脚本
select top 888888 * from [sqlTableName]
—消息框产生如下信息:
—sql编译时间 运行时间
CPU time = 0 ms, elapsed time = 0 ms.
(888888 row(s) affected)
表 ‘sqlTableName’。扫描计数 1,逻辑读取18801次,物理读取 32 次,预读 16320次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
sql 执行时间:
CPU time = 1532 ms, elapsed time = 13021 ms.
—在返回值说明中,
我们需着重优化 逻辑读取次数,逻辑读取次数代表我们从内存中获取数据的次数,获取次数越少,代表消耗的IO越小,此参数优化的越小,sql脚本的性能越优化
物理读取次数:通常在系统第一次加载数据时,次数会增加,后期系统数据被缓存至数据库中时,物理读取次数会越来越小, 如果此值居高不下,说明系统内存不足,或者查询业务设计存在一定的问题(都是大报表)。
CPU Time:cpu执行时间
elapsed time:执行等待时间(包含IO 等待 网络等待…)
两个加起来会总执行时间
此执行时间的优化,通常我们需结合实际情况,例:服务器是否繁忙,硬件是否高效,上面运行的服务是否多,等等。


综上所述:
我们应尽量减少扫描次数
减少逻辑读取次数
减少物理读取次数
减少CPU执行时间