tidb6.1.2 stats_meta 统计数据更新太频繁 ,有时候对应的table_id 没有数据也在频繁更新

【 TiDB 使用环境】生产环境 /测试/ Poc
生产
【 TiDB 版本】
6.1.2
【复现路径】做过哪些操作出现的问题
alter table Material_Participant_Daily_Report truncate partition(p20221124);
insert into Material_Participant_Daily_Report select xxx ;
【遇到的问题:问题现象及影响】
大量并发慢查询日志 update mysql.stats_meta set version = 437586348311314492, count = count + 0, modify_count = modify_count + 1264 where table_id = 31622;

(user:tidbdba time: 11:15)[db: yixintui_operate]select * from mysql.stats_meta where table_id=31622;
Empty set (0.03 sec)
select * from information_schema.tables where tidb_table_id=31622;
yixintui_operate | Material_Participant_Daily_Report


最近两天的统计数据没有 。因为最近两天的数据 会经常按天被truncate partition 。

【资源配置】
【附件:截图/日志/监控】

你可以设置不更新的。

怎么设置单表不更新统计信息?

(user:tidbdba time: 14:43)[db: yixintui_operate]DROP STATS Material_Participant_Daily_Report_old;
这个命令特别慢 可能分区 太多了 , 快20分钟了 还没结束 。
Query OK, 0 rows affected (38 min 2.65 sec) #38分钟 才执行成功 。

(user:tidbdba time: 14:52)[db: yixintui_operate]show analyze status where Table_schema=‘Material_Participant_Daily_Report_old’;
Empty set (0.01 sec)
都没有 却频繁的 update mysql.stats_meta set version = 437589775267397654, count = count + 0, modify_count = modify_count + 28 where table_id = 31622;
表名已经改了 加了_old 没有更新逻辑了 ,但是 还是频繁更新这个 31622 的 stats_meta 信息。

这个统计结果太魔幻了 ,15:03 有时有 table_id=31622 有时没有 ,我还以为我出现幻觉了呢 。

drop掉Material_Participant_Daily_Report_old 之后 就没有了


(user:tidbdba time: 16:48)[db: yixintui_operate]recover table Material_Participant_Daily_Report_old ;
Query OK, 0 rows affected (2.25 sec)
恢复之后观察看看 。不行我明天再drop掉它 。 数据已经备份 ,到时候可以把数据灌回到新的备份表。
恢复之后 31622 又来了 -----

31622 再次drop 掉 。 现在table_id= 217013 (小时报表 Material_Participant_Hour_Report 频繁更新统计信息)


这个dashboard 统计结果真他妈魔幻 ,刚才还看到18:27大量 217013 ,再次刷新既然没了。

再刷新 又在 18:31 18:32出现大量的 217013

我的测试环境也发现很多 update mysql.stats_meta 的sql

看你前面描述应该是个分区表,没有任何分区有DML操作吗。 stats_metade modify_count更新是比较频繁,可以根据show stats_meta查看表的这些新最后更新时间。统计信息的收集是依靠modif_count 来计算统计信息陈旧,然后根据相关参数设置再收集统计信息。