SQLSERVER中的引用计数器 执行计划 set statistics io getnext

SQLSERVER中的引用计数器 执行计划 set statistics io getnext

执行计划的老化:   什么叫老化?就是没用了,弃用它.那在SQL SERVER怎么样去判断老化的执行计划呢?
  每个查询计划和执行环境都有相关的成本因子,可表明编译结构所需的费用。这些数据结构还有一个年龄字段。对象每由连接引用一次,其年龄字段便按编译成本因子递增。
  比如

1)如果查询计划的成本因子为 8 并且被引用了两次,则其年龄变为 16。
2)惰性写入器进程定期扫描过程缓存中的对象列表。然后,惰性写入器减少每个对象的年龄字段,每扫描一次减少 1。
3)不断重复1)2)步骤,不断变化对象的年龄字段.

再举个例子:我的一个SQL语句成本因子为6.我第一次引用后 他的年龄变成6.         惰性写入器每2天扫描一次,6天后,它的年龄变成3(6-3).         然后三天后我又连续调用2次 ,年龄又变成了15.说明它至少还30天可以不被调用.    原因很简单 一旦对象的年龄字段为0 是惰性写入器进程将释放对象的条件之一,还有2个条件是:            a.内存管理器需要内存而所有可用内存都正在使用。            b.对象在当前没有被连接引用。
  因为每次引用对象时其年龄字段都会增加,所以经常被引用的对象的年龄字段不会减为 0,也不会从缓存老化掉。

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

 

SQL里做读和写的时候,会运行到某一段特定的代码。每调用一次
这个代码,Reads/Write就会加1。所以这个值比较大,那语句一定做了比较多的I/O。
但是不能通过这个值计算出I/O的绝对数量。另外,这个值反映的是逻辑读写量,
不是物理读写量 相当于SET STATISTICS IO ON  27次运行了27次特定代码
-------------------------------------------------------------------------------------------------------
GetNext():GetNext() 方法使物理运算符获得数据的第一行或后续行。 物理运算符可以不接收 GetNext() 调用,也可以接收许多次调用。
GetNext() 方法返回一个数据行,它的调用次数作为 ActualRows 显示在使用 SET STATISTICS PROFILE ON 或 SET STATISTICS XML ON 生成的显示计划输出中。

 

posted @ 2013-08-31 09:42  桦仔  阅读(827)  评论(0编辑  收藏  举报