• 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:执行计划的这一步是不是使用了并行的执行计划。

    效果如下:

    原文链接

  • 相关阅读:
    使用 RAISERROR
    简单计算 2个日期 相差的 天数 和 小时数
    一个 SQL 分段排序的问题(也可以理解为 段内汇总排序问题)
    清除数据库里面所有用户表的数据
    SQL for xml path 应用 很详细
    mybatis读取配置文件报错:Could not find resource configuration.xml
    Attribute "resource" must be declared for element type "mapper".
    Mac OS X Common Lisp环境配置
    【自己习惯太差】最近看书的总结(1),慢慢改正自己的习惯
    LMS权值更新法则
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/11247903.html
Copyright © 2020-2023  润新知