第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
原文: 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理

前言:

统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要返回的数据。

在创建列的统计信息后,在DML操作如insert、update、delete后,统计信息就会过时。因为这些操作更改了数据,影响了数据分布。此时需要更新统计信息。

在高活动的表中,统计信息可能几个小时就会过时。对于静态表,可能几个星期才会过时。这要视乎表上DML的操作。

从2000开始,SQLServer对增删改操作会增加在表sysindexes中的RowModCtr(Row Modification Counter)值,当统计信息更新后,该值会重置会0,并重新累加。所以查看这个表的这个值就可以知道统计信息是否过时。

在2000之后,SQLServer改变了这种跟踪方式,把更改存放到对应的数据行上。这个值是未公开的ColModCtr。

但是sys.sysindexes到2012依旧可用,还是可以用这个表的数值来确定是否过期。

准备工作:

本文将用到下面的系统视图和兼容性视图:

1、  sys.sysindexes:兼容性视图,提供RowModCtr列值,是本文的核心。

2、  sys.indexes:使用表ID来获得统计信息名。

3、  sys.objects:获取架构名。

步骤:

显示RowModCtr值很高的统计信息:

SELECT DISTINCTOBJECT_NAME(SI.object_id) AS Table_Name ,SI.name AS Statistics_Name ,STATS_DATE(SI.object_id, SI.index_id) AS Last_Stat_Update_Date ,SSI.rowmodctr AS RowModCTR ,SP.rows AS Total_Rows_In_Table ,'UPDATE STATISTICS [' + SCHEMA_NAME(SO.schema_id) + '].['+ OBJECT_NAME(SI.object_id) + ']' + SPACE(2) + SI.name AS Update_Stats_ScriptFROM    sys.indexes AS SI( NOLOCK )INNER JOIN sys.objects AS SO( NOLOCK ) ON SI.object_id = SO.object_idINNER JOIN sys.sysindexes SSI( NOLOCK ) ON SI.object_id = SSI.idAND SI.index_id = SSI.indidINNER JOIN sys.partitions AS SP ON SI.object_id = SP.object_idWHERE   SSI.rowmodctr > 0AND STATS_DATE(SI.object_id, SI.index_id) IS NOT NULLAND SO.type = 'U'ORDER BY RowModCTR DESC

分析:

需要了解一些事情:

1、  从你上次更新统计信息是何时的事情?

2、  在更新统计信息之后有多少事务发生在表上?

3、  哪些T-SQL需要用于更新统计信息。

4、  更新统计信息是否可行?这个是对比RowModCTR列和Total_Rows_In_Table列。

当在数据库开启了Auto_Update_Statistics之后,还有数据的话,那就有必要更新统计信息。下面有一些规则:

1、  表大小从0增长。

2、  当表的数据小于等于500时没有问题,并且ColModCtr从超过500行之后开始增长。

3、  当表的行数超过500行时,在统计信息对象的引导列的ColModCtr值超过500+20%的行数时,就需要更新。

例子:有一个100万行的表,优化器会在插入200500行新数据后认为统计信息过时。但是这并不是绝对化的。

扩充知识:

没有直接的方式访问ColModCtr的值,因为它只是用于优化引起,并且对用户透明,但是可以使用DAC(专用管理员连接)来访问sys.sysrscols.rcmodified系统。但是仅在2008R2及以后版本才可用。

posted on 2015-03-06 15:23 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4318367.html

第十二章——SQLServer统计信息(3)——发现过期统计信息并处理相关推荐

  1. 【Java数据结构与算法】第十二章 哈夫曼树和哈夫曼编码

    第十二章 哈夫曼树和哈夫曼编码 文章目录 第十二章 哈夫曼树和哈夫曼编码 一.哈夫曼树 1.基本术语 2.构建思路 3.代码实现 三.哈夫曼编码 1.引入 2.介绍 3.代码实现哈夫曼编码综合案例 一 ...

  2. Linux云计算【第一阶段】第十二章:网络管理、进制及SSH管理与攻防

    第十二章:网络管理及SSH管理与攻防 [重难点] 一.网络发展概述 局域网 城域网 广域网 基本网络协议 客户端与服务器的概念 从客户端到服务器的经过 No.1 客户端与服务器的概念 客户端: 即表示 ...

  3. 高级shell编程笔记(第十二章 外部过滤器,程序和命令)

    第十二章 外部过滤器,程序和命令 标准的UNIX命令使得脚本更加灵活.通过简单的编程结构把shell指令和系统命令结合起来,这才是脚本能力的所在. 12.1 基本命令 新手必须掌握的初级命令 ls 基 ...

  4. 【信息系统项目管理师】第二十二章 信息系统安全管理(考点汇总篇)

    [信息系统项目管理师]第二十二章 信息系统安全管理(考点汇总篇) 考点分析与预测 信息安全为高级科目独有的章节,在第三版教材中有66页的内容.需要掌握的知识点非常多,且知识点非常散,在考试中上午一般考 ...

  5. linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...

    <Linux命令行与shell脚本编程大全> 第二十二章 学习笔记 第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系 ...

  6. 「第十二章」Web框架安全

    「第三篇」服务器端应用安全批注[--] 表示他人.自己.网络批注参考资料来源于* 书中批注* CSDN* GitHub* Google* 维基百科* YouTube* MDN Web Docs由于编写 ...

  7. 【正点原子FPGA连载】 第三十二章基于lwip的TCP服务器性能测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    第三十二章基于lwip的TCP服务器性能测试实验 上一章的lwip Echo Server实验让我们对lwip有一个基本的了解,而Echo Server是基于TCP协议的.TCP协议是为了在不可靠的互 ...

  8. 第十二章 Django框架

    第十二章 Django框架 tcp/ip五层模型 应用层 传输层 网络层 数据链路层 物理层 socket : 套接字,位于应用层和传输层之间的虚拟层,是一组接口 c/s架构 ------> b ...

  9. 第五十二章 SQL命令 INSERT(一)

    文章目录 第五十二章 SQL命令 INSERT(一) 大纲 参数 描述 INSERT OR UPDATE %Keyword字选项 表参数 赋值 值赋值语法 显示到逻辑数据的转换 %SerialObje ...

最新文章

  1. opencv中Range类的使用
  2. PTGAN:针对行人重识别的生成对抗网络 | PaperDaily #36
  3. 阿里云峰会 | AI搜题加速在线教育行业场景创新
  4. 凭借K2 SmartObject框架,在SharePoint中集成数据
  5. JavaScript(五)对象
  6. 为什么阿里规定需要在事务注解 @Transactional 中指定 rollbackFor?这...
  7. 保研经历-清华计算机、北大、中科院计算所
  8. DHTML 页面对象属性
  9. ios开发 之 简体和繁体中文转换
  10. Taro 3.x 开发 APP 记录 (持续记录中。。。)
  11. C语言基础知识梳理总结
  12. SQL*Plus 系统变量之59 - VER[IFY]
  13. 9.3.2 自然连接(NATURAL JOIN)
  14. 重定向 return redirect:/user/index;
  15. python使用Thread的setDaemon启动后台线程
  16. 多张CAD图纸需要转换PDF格式怎么样操作更快?
  17. 管理理念:星巴克-文化成就品牌传奇
  18. 多线程与并发 - Java 8 CompletableFuture 异步多线程
  19. 《不会吧?不会吧?不会还有人不知道 Markdown 吧?|CSDN编辑器测评》
  20. JAVA 文件上传下载工具类

热门文章

  1. efficientnet-yolo3-tf2的实现
  2. 矿区无人机影像地物提取(语义分割)
  3. java路径在那_Java 路径
  4. hdu 1195 Open the Lock
  5. [转载]无线通信系统中的调制解调基础(一):AM和FM
  6. tp5 linux定时,TP5 用cron实现linux定时任务
  7. python关键字define_在Python中,使用关键字define定义函数。
  8. 电脑指定区域旋转_随州平板电脑无线管道潜望镜QV厂家_武汉天仪仪器
  9. SD-WAN平台ActiveCore推出,领域新亮点精彩丰呈
  10. 两道关于回溯法,分支限界法的算法题