• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Trae
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

SQL Server优化之SET STATISTICS开关(转载)

一、准备工作


 

缓存对于某个查询的性能影响十分之大,所以优化之前要清空缓存。

 

清除Buffer Pool里面的所有缓存

DBCC DROPCLEANBUFFERS

 

清除Buffer Pool里的所有缓存的执行计划,已经预编译的内容,在此处将被清空

DBCC FREEPROCCACHE

 

 

二、SET STATISTICS TIME ON/OFF开关


 

这个开关能输出SQL语句各阶段所消耗的时间

 

返回值说明:
CPU Time,SQL Server所花的纯CPU时间是多少,也就是说语句花了多少CPU资源
elapsed Time,语句运行的时间长短,有些动作会发生I/O操作、产生了I/O等待,或者是遇到阻塞、产生阻塞的等待,总之时间用掉了,但是没有用CPU资源,所以Elapsed Time比CPU Time长是很正常的。但是CPU Time是语句在所有CPU上的时间总和,如果语句使用了多颗CPU,而其他等待几乎没有,那么CPU Time大于Elapsed Time也是正常的。
SQL Server parse and compile time,语句的编译时间
SQL Server Execution Times,语句真正运行的时间

 

效果如下:

 

 

三、SET STATISTICS IO ON/OFF开关


 

这个开关能够输出语句做的物理读和逻辑读的数,这个开关对SQL Server执行计划的性能调优非常重要。一般逻辑读次数(logical reads)越小越好。

 

返回值说明:
scan count:执行的扫描次数。按照执行计划,表格被Scan了几次。一般来讲大表Scan的次数越多越不好,唯一的例外是如果执行计划选择了并发运行,由多个Thread同时做一个表的读取,每个Thread读其中的一部分,但是这里会显示所有Thread的数目。也就是有几个Thread在并发做,就会有几个Scan。这时数目大一点没问题。
logical reads:从数据缓存读取的页数。页数越多,说明查询要访问的数据量就越大,内存消耗量越大,查询也就越昂贵。可以检查是否应该调整索引,减少扫描的次数,缩小扫描范围。
physical reads:从磁盘读取的页数。
read-ahead reads:为进行查询而预读入缓存的页数。
physical reads + read ahead reads就是SQL Server为了完成这句查询而从磁盘上读取的页数。如果不为0,说明数据没有缓存在内存里,运行速度一定会受到影响。
lob logical reads:从数据缓存读取的Text、Ntext、Image或大值类型(Varchar(max)、Nvarchar(max)、Varbinary(max))页的数目。
lob physical reads:从磁盘读取的Text、Ntext、Image或大值类型页的数目。
lob read-ahead reads:为进行查询而放入缓存的Text、Ntext、Image或大值类型页的数目。

 

效果如下:

 

 

四、SET STATISTICS PROFILE ON/OFF开关


 

这个开关能返回语句的执行计划,以及语句运行在每一步的实际返回行数

 

Rows:执行计划的每一步返回的实际行数。
Executes:执行计划的每一步被运行了多少次。
StmtText:执行计划的具体内容。执行计划以一棵树的形式显示。每一行,都是运行的一步,都会有结果集返回,也都会有自己的cost。
EstimateRows:SQL Server根据表格上的统计信息,预估的每一步的返回行数。在分析执行计划时,我们会经常将Rows和EstimateRows这两列做对比,先确认SQL Server预估得是否准确。
EstimateIO:SQL Server根据EstimateRows和统计信息里记录的字段长度,预估的每一步会产生的I/O cost。
EstimateCPU:SQL Server根据EstimateRows和统计信息里记录的字段长度,以及要做的事情的复杂度,预估的每一步会产生的CPU cost。
TotalSubtreeCost:SQL Server根据EstimateIO和EstimateCPU通过某种计算公式,计算出的每一步执行计划子树cost(包括这一步自己的cost和它的所有下层步骤的cost总和)。
Warnings:SQL Server在运行每一步时遇到的警告,例如,某一步没有统计信息支持cost预估等。
Parallel:执行计划的这一步是不是使用了并行的执行计划。

 

效果如下:

 

 

原文链接

 

posted @ 2019-07-26 01:46  PowerCoder  阅读(1060)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3