统计信息设置自动更新但未进行更新

m0_73085365 2022-08-09 16:02:53

2008 R2数据库 兼容级别 100

今天排查一个性能问题,最后发现是由于业务表中于统计信息过期导致

使用脚本

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'
		And OBJECT_NAME(SI.object_id)='dlyndx'
 
ORDER BY RowModCTR DESC

查到有大量的统计信息已有很多变更计数,但是一直未更新统计信息

 按照https://www.cnblogs.com/kerrycode/p/3688804.html 潇湘隐者 中的方式

对应相关查询后,统计信息还是未被更新这个为什么呢

 自动更新状态为开启

 

 

...全文
183 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 2022-08-09
  • 打赏
  • 举报
回复

每周重建一次索引吧。
如果大表不多,一天一次也可以的。
这个效果是最好的,统计信息更新了,而且索引效率高。

m0_73085365 2022-08-09
  • 举报
回复
@吉普赛的歌 是的日常维护挺重要的
吉普赛的歌 版主 2022-08-10
  • 举报
回复
@m0_73085365 你没做定期重建索引吧? 如果做了的话,根本不需要关心统计信息更新的事情。
m0_73085365 2022-08-10
  • 举报
回复
@吉普赛的歌 之前都是客户自己部署使用,没人管
猫狸嘎 2022-08-09
  • 打赏
  • 举报
回复

索引中的set属性STATISTICS_NORECOMPUTE,设置为off了,需要改为on

猫狸嘎 2022-08-09
  • 举报
回复
@猫狸嘎 或者,你的索引从未被seek,光被scan不会更新
m0_73085365 2022-08-09
  • 举报
回复
@猫狸嘎 他是走的seek ,但是的确STATISTICS_NORECOMPUTE 设置成off了,奇怪了我们没有这么设置过,修改后再查询就刷新了
laowan688 2022-08-09
  • 打赏
  • 举报
回复

印象里好像必须满足一定条件才触发的。
你可以查询下具体的触发值。 好像是变更行达到总共的20% 左右。

或者创建job 定期更新 index , statistics 吧。

laowan688 2022-08-09
  • 举报
回复
@laowan688 我使用的数据库版本是2016
m0_73085365 2022-08-09
  • 举报
回复
@laowan688 按照RowModCTR 中的统计变更数来看,已经远远超过了当前表中的记录数。而且我看了下现在统计信息中的记录值,都是往年的记录了,当前的业务表中早就没有这些值了
m0_73085365 2022-08-09
  • 举报
回复 1
@laowan688 感觉稳妥点的就是创建维护计划了,但就是很奇怪为什么会不自动更新错的这么离谱的
2条回复

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧