• SQL执行效率2-执行计划


    以下语句可以进行SQL 语句执行时间分析,两个Go之间就是SQL查询语句

    [sql] view plain copy
     
    1. use Work--数据库名  
    2. go  
    3. set statistics profile on  
    4. set statistics io on  
    5. set statistics time on  
    6. go  
    7. -----(SQL执行语句)  
    8. go  
    9. set statistics profile off  
    10. set statistics io off  
    11. set statistics time off  
    12. go  



    运行一次后就可以在查询结果的信息标签下看到统计信息

    SQL Server 的查询过程为根据SQL表中的统计信息分析执行计划,然后才是编译,最后执行。

    其中一共用到了三条Statistics相关语句

    一、statistics time选项

            用于显示分析、编译和执行各语句所需的毫秒数。

    1、CPU时间和占用时间:

    (1)CPU时间是指该句CPU占用的时间,即语句占用了多少CPU资源。在多个CPU的系统中,这个CPU时间是所有CPU上时间的总和。与profiler工具和服务器跟踪选项所提供的CPU值一致

    (2)占用时间是指该语句总共用的时间,包括可能存在的I/O等待时间等。这个与Profiler中的Duration值一致

    通常数据需要从磁盘中读取,还可能遇到I/O阻塞,因此大部分情况下看到的是占用时间大于CPU时间,这个很容易理解,但有时候CPU时间是可能大于占用时间的,这是由于该句使用了多个CPU,但是等待时间又很短

               

    那么个SQL语句的CPU时间就是分析编译里的CPU时间加上执行时间里的CPU时间之和,整个语句的执行时间就是所有占用时间之和。通常编译主要就是CPU的运算,那么CPU时间和占用时间应该是比较接近的。如果在执行过程,就可能需要将数据从磁盘读入内存,那么I/O等待时间的消耗就可能造成占用时间很长。

    2、在存在缓存的情况下,执行计划可以重用,因此分析编译时间可能都为零;执行过程中的数据也不需要从磁盘上读取,所以执行时间中的中占用时间很短,缓存使得性能大提高。

    二、Statistics IO选项

          用于SQL Server 显示有关由 Transact-SQL 语句生成的磁盘活动量的信息。

    1、“表 'ProductLite'。扫描计数 1,逻辑读取 3077 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。”这条结果中出现的概念在SQL Server帮助文档中都有解释

    2、逻辑读取与Profiler中的Reads值是一个概念,但是由于profile日跟踪显示的Reads随着该查询使用的SET语句而增长,但是Statistics IO显示的逻辑读数量不包含SET语句所访问的附加页面,因此,Statistics IO提供的读操作数量一致。

    3、当内存中还没有需要查找的数据时,需要从磁盘读取,因此物理读取和预读都不会为零;一旦经过一次查询后,该数值放入缓存,那么这两个值将保持为零。

    三、Statistics profiler

              显示语句的配置文件信息。STATISTICS PROFILE 对即席查询、视图和存储过程有效。

    参数说明

    Rows:执行计划的每一步返回的实际行数

    Executes:执行计划的每一步被运行了多少次

    StmtText:执行计划的具体内容。执行计划以一棵树的形式显示。每一行都是运行的一步,都会有结果集返回,也都会有自己的cost

    EstimateRows:SQLSERVER根据表格上的统计信息,预估的每一步的返回行数。

    EstimateIO:SQLSERVER根据EstimateRows和统计信息里记录的字段长度,预估的每一步会产生的I/O cost

    EstimateCPU:SQLSERVR根据EstimateRows和统计信息里记录的字段长度,以及要做的事情的复杂度,预估每一步会产生的CPU cost

    TotalSubtreeCost:SQLSERVER根据EstimateIO和EstimateCPU通过某种计算公式,计算出每一步执行计划子树的cost

    Warnings:警告信息

    Parallel:是否使用了并行的执行计划

  • 相关阅读:
    java 排序算法
    简单选择排序
    .net 调用css/javascipt出现的问题及解决
    《大道至简》的幕后故事(4):“愚公移山记”军事地理篇
    asp.net web services
    《大道至简》的幕后故事:终结篇、勘误和PDF下载
    Java开发人员的十大戒律
    NUnit 使用
    快速排序
    .NET中回发或回调参数无效问题的解决
  • 原文地址:https://www.cnblogs.com/mrcln/p/6100367.html
Copyright © 2020-2023  润新知