如何检测过期的统计信息

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

在SQL Server 2005以后的版本里,SQL Server使用ColModCtr 对统计的主要列对象进行跟踪。但在 SQL server 2005或SQL server 2008里没有对应的DMV进行查询,直到SQL server 2008 R2 (SP2) 开始的版本,才有sys.dm_db_stats_properties 对统计的主要列对象改变有详细的统计信息。

对于老版本的SQL Server用户来说,我们需要基于sys.sysindexes的可用rowmodctr。自SQL Server 2005开始的版本,rowmodctr已经与老版本不再兼容。在SQL Server早期版本里,数据库引擎维护行级别的计数器修改(row-level modification counters)。这些计数器现在在列级别维护。因此,rowmodctr用来计算和生成的结果与早期版本的计数器类似,但不完全等同。

下面的查询可以列出在统计信息里的预估改变: 

复制代码
 1 SELECT 
 2      TableName=OBJECT_NAME(i.OBJECT_ID)
 3     ,ObjectType=o.type_desc
 4     ,StatisticsName=i.[name]
 5     ,statisticsUpdateDate = STATS_DATE(i.OBJECT_ID, i.index_id)
 6     ,RecordModified=si.rowmodctr
 7     ,NumberofRecords=si.rowcnt
 8 FROM sys.indexes i 
 9 JOIN sys.objects o ON    i.OBJECT_ID=o.OBJECT_ID
10 JOIN sys.sysindexes si ON    i.OBJECT_ID=si.id
11     AND i.index_id=si.indid 
12 WHERE  o.TYPE <> 'S' AND STATS_DATE(i.OBJECT_ID, i.index_id) IS NOT NULL
13 UNION ALL
14 SELECT 
15      TableName=OBJECT_NAME(o.OBJECT_ID)
16     ,ObjectType=o.type_desc
17     ,StatisticsName=s.name
18     ,statisticsUpdateDate= STATS_DATE(o.OBJECT_ID, s.stats_id)
19     ,RecordModified=si.rowmodctr
20     ,NumberofRecords=ir.rowcnt
21 FROM sys.stats s INNER JOIN sys.objects o ON s.OBJECT_ID=o.OBJECT_ID
22 JOIN sys.sysindexes si ON s.OBJECT_ID=si.id AND s.stats_id= si.indid
23 INNER JOIN (SELECT id,rowcnt FROM sys.sysindexes WHERE indid IN (0,1)) IR
24 ON IR.id=o.OBJECT_ID  WHERE  o.TYPE <> 'S'  
25 AND (s.auto_created=1 OR s.user_created=1)AND STATS_DATE(o.OBJECT_ID, s.stats_id) IS NOT NULL
复制代码

根据这个查询结果,加上我们系统中现运行查询的工作量/类别,我们就可以在合适的时间用计划任务定期对统计信息进行更新,不用盲目的更新所有统计信息。



本文转自Woodytu博客园博客,原文链接:http://www.cnblogs.com/woodytu/p/4522318.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
6月前
2391. 收集垃圾的最少总时间
【5月更文挑战第6天】 收集垃圾的最少总时间
47 4
|
Oracle 关系型数据库
10G自动收集统计信息修改
10G自动收集统计信息修改
114 0
10G自动收集统计信息修改
|
SQL Go 索引