一、SET STATISTICS IO(有关TSQL语句查询所产生的磁盘活动量)

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

    SET STATISTICS IO ON

  --关闭有关由Transact-SQL 语句生成的磁盘活动量的信息

    SET STATISTICS IO OFF

 

显示的信息如下:

(SQL语句为:select * from note500)

sql server 2012 sql性能分析工具 sql查询性能_执行计划

其中:

     扫描计数:在查询中涉及到的表被访问的次数;

     逻辑读取:从数据缓冲中读取的数据页数;

     物理读取:从物理磁盘中往缓冲读取的数据页数;

     预读:根据执行计划从物理磁盘中往缓冲读取的数据页数;

     其中对于首次查询一般情况下会有一下关系:逻辑读取=物理读取+预读(其中的具体联系,由于已经在之前的博客文章中提到,就不再详细说明(文章名为【查询优化】MSSQL查询执行流程))

     同理,后面的lob逻辑读取、物理读取、预读概念理解差不多,只是是对相应表进行更新或插入操作时体现。

 

     对于扫描计数,以上图片的查询没有连接查询,因此意义不大。不过,如果连接查询来说,特别是循环查询那种,比如说自连接,如果循环次数越多,则扫描次数也就越多,则会使得查询的效率越低。这是扫描计数是一个比较重要的性能体现参数。

     对于逻辑读取,由于SQLSERVER中对数据进行任何操作都要把数据读入到缓冲当中,如果逻辑读取的页数越多,则查询的性能越低。为此,逻辑读取一般都是查询性能体现的一个重要参数。

二、SET STATISTICS TIME  (SQL Server解析和编译时间)

显示:SQL Server解析和编译时间

---SET STATISTICS TIME ON

关闭:SQL Server解析和编译时间

---SET STATISTICS TIME OFF

sql server 2012 sql性能分析工具 sql查询性能_数据_02


   上面显示的信息表明,执行这次查询使用了多少CPU运行时间和运行查询使用了多少时间。CPU运行时间是对运行查询所需要的CPU资源的一种相对稳定的测量方法,与CPU的忙闲程度没有关系。但是,每次运行查询时这一数字也会有所不同,只是变化的范围没有总时间变化大。总时间是对查询执行所需要的时间(不计算阻塞或读数据的时间),由于服务器上的负载是在不断变化的,因此这一数据的变化范围有时会相当地大。

总的来说,量化地来看一个查询语句的性能可以在几个参数进行比较:

1、CPU时间。比较查询所要占用的CPU资源时间;

2、I/O。可以比较查询的循环扫描次数和逻辑读取的数据量;

来源:http://blog.sina.com.cn/s/blog_a637e97e010131cb.html

-----------------------------

【查询优化】MSSQL查询执行流程

 sql server 2012 sql性能分析工具 sql查询性能_数据_03(2012-09-13 12:33:31)

sql server 2012 sql性能分析工具 sql查询性能_SQL_04

清空缓存的方法:

dbcc dropcleanbuffers

dbcc freeproccache

 

第一:一个查询首次执行时,缓存中没有相应的数据,这个时候,首先会生成一个执行计划

生成一个执行计划的方法:

选中要查询的SQL语句,然后按下CTRL+L,有下图结果

(该图的语句为:select * from note500) 

sql server 2012 sql性能分析工具 sql查询性能_SQL_05

然后同步地,会根据计划从物理硬盘中提取相应的数据到缓冲区,这就是预读。制定执行计划和预读操作是并行进行的。

接着,如果缓冲区中没有完整的查询数据,就需要从物理硬盘中再读取出相应缺少的数据,这就是物理读

最后才是读取缓冲区中的数据,也就是逻辑读

第二:当第二次执行这个查询的时候就会直接读取缓冲区的数据,就没有预读和物理读了,因为缓冲区中已经有了相应的查询结果数据。

 

下面是查询的结果消息:

 

(5000000 行受影响)
表 'note500'。扫描计数 1,逻辑读取 33769 次,物理读取 0 次,预读 33768 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。