SQL Server研究之统计信息—发现过期统计信息并处理具体解释
前言:
统计信息是关于谓词中的数据分布的主要信息源,假设不知道详细的数据分布,优化器不能获得预估的数据集。从而不能统计须要返回的数据。
在创建列的统计信息后,在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值非常高的统计信息:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
SELECT
DISTINCT OBJECT_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_Script FROM sys.indexes
AS SI( NOLOCK ) INNER
JOIN sys.objects AS SO( NOLOCK ) ON SI.object_id = SO.object_id INNER
JOIN sys.sysindexes SSI( NOLOCK ) ON SI.object_id = SSI.id AND
SI.index_id = SSI.indid INNER
JOIN sys.partitions AS SP ON SI.object_id = SP.object_id WHERE
SSI.rowmodctr > 0 AND
STATS_DATE(SI.object_id, SI.index_id) IS NOT NULL AND
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及以后版本号才可用。
SQL Server研究之统计信息—发现过期统计信息并处理具体解释的更多相关文章
- 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
原文:第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要 ...
- [转]删除SQL Server Management Studio中保存的帐户信息
http://www.2cto.com/database/201208/149850.html 删除SQL Server Management Studio中保存的帐户信息 SQL Serve ...
- Sql Server 2008开发版(Developer Edition)过期升级企业版(Enterprise Edition)失败后安装学习版(Express Edition)
最近一个多月,甚是悠哉,无事可做.上线的网站系统也没接到客户的反馈,反而觉得无聊之极了.上周五早上,一上QQ,就收到客户发来消息,管理平台无法登陆了.心里一惊,立马开始查找故障原因.翻看了系统日志,提 ...
- 【SQL Server 2012】按倒序存储“分组统计”结果的临时表到新建表
程序预先说明: 本文访问的数据库是基于存有RDF三元组的开源数据库Localyago修改的库,其中只有一个表,表中有五个属性:主语subject.谓语predict.宾语object.主语的编号sub ...
- 显示 Sql Server 中所有表或表中行的信息
在MSSQL中显示某个数据库中所有表或视图的信息: (以下语句为获取所有表信息,将绿色字"U"替换为"V"则获取所有视图信息.) SELECT sysobjec ...
- SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
由于前一段时间胃痛,导致博客园博客都停更了一个月左右.近几天,胃病终于稍微有所好转,决定重新写博文. 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份.月份销售额,而需要一 ...
- SQL Server还原和一些小发现
1.当数据库已经建好在DB里,SQL Server 2005 和 SQL Server 2008使用.Bak文件还原的时候,会出现 error : "The backup set holds ...
- 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)
1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...
- SQL Server 2005/2008遍历所有表更新统计信息
DECLARE UpdateStatisticsTables CURSOR READ_ONLY FOR 02 SELECT sst.name, 03 Schema_name(ss ...
随机推荐
- 分享三个USB抓包软件---Bus Hound,USBlyzer 和-USBTrace
Bus Hound官方下载地址:http://perisoft.net/bushound/Bus Hound 简易使用手册:bus_hound5.0中文使用说明.pdf (246 K) 下载次数:9 ...
- linux 关闭ping探测
先切换到root echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 1代表关闭 0代表开启 用iptables iptables -I INPUT ...
- ElasticSearch refresh和flush的理解
在索引数据的时候,要保证被索引的文档能够立即被搜索到,就要涉及到_refresh 和_flush这两个方法. 1.fresh 当索引一个文档,文档先是被存储在内存里面,默认1秒后,会进入文件系统缓存, ...
- 格式化HDFS
格式化HDFS 查看hdfs-site.xml 将 dfs.namenode.name.dir和dfs.datanode.data.dir 目录中文件删除 <configuration> ...
- swftools使用
为了支持gif转swf以及pdf转swf.编译swftools过程中遇见几个问题,记录一下. 首先下载swftools:http://www.swftools.org/ 它依赖几个包,这里我使用的版本 ...
- netty handle处理流程
server handlerAdded server channelRegistered server channelActive server read server channelInactive ...
- react-native 项目实战 -- 新闻客户端(6) -- 完善ListView头部视图
1.因为需要定时器,所以我们要cd到当前项目根目录下安装这个类库: $ npm i react-timer-mixin --save 2.Component/ScrollImage.js /** * ...
- NSDate 类的总结,全面基础
<span style="font-size:24px;"><span style="font-size:18px;">//1.创建日期 ...
- 51单片机 | A/D转换器实现数字电压表实例
———————————————————————————————————————————— ADC0809 - - - - - - - - - - - - - - - - - - - - - - - - ...
- css3中的新特性经典应用
这篇文章主要分析css3新特性的典型应用,都是干活,没得水分. 1.动画属性:animation. 利用animation可以实现元素的动画效果,他是一个简写属性,用于设置6个动画属性:aminati ...