为什么statements_summary_history表会保留过长的历史记录

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5

https://docs.pingcap.com/zh/tidb/stable/statement-summary-tables#statements_summary_history

按该文档的说法,该表再所有值都保持默认的情况下应该只保留12小时的数据
包括控制台的显示也是只保留12小时

但是实际表里的数据最早可以追溯到3月份

这是bug还是文档没描述清楚

这个表一共有多少条记录?

4w多 从3月份的数据一直持续到现在

文档说 “为了监控指标的即时性,statements_summary 里的数据定期被清空,只展现最近一段时间内的聚合结果。清空周期由系统变量 tidb_stmt_summary_refresh_interval 设置。如果刚好在清空之后进行查询,显示的数据可能很少。”

没说要清空 statements_summary_history 既然叫 history肯定保留较长历史记录了

把文档看全啊
以上配置生效后,statements_summary 每 30 分钟清空一次,所以 statements_summary_history 保存最近 12 小时的历史数statements_summary_evicted 保存最近 24 个发生了 evict 的时间段记录;statements_summary_evicted 则以 30 分钟为一个记录周期,表容量为 24 个时间段。

SHOW GLOBAL VARIABLES LIKE ‘%tidb_stmt%’;
这些参数看下的,我的理解只有超过tidb_stmt_summary_max_stmt_count这个值才会按时间删除

我看错了,不过我检查了2个 tidb集群,这个表里面的数据都很多天了,肯定不是12小时删除

是的 我两个环境都这样 而且感觉超过12个小时的保存的很少都只有几十条 但是在12个小时之内的时间段都是几百条的

估计要么是文档错了 要么就是有bug

tidb_stmt_summary_max_stmt_count默认3000

我这里都4890条了

这个应该是文档没有描述清楚。

如果很长一段时间都没有负载的话,可能存在很久以前的数据。准确的描述应该是对于每种类型的 SQL 语句,保存最近 24 个时间窗口(每个窗口默认半个小时)的的数据, 但如果某个 SQL 语句在半个月前出现过,后面一直没怎么出现,而且集群里面的 SQL 总数不超过 tidb_stmt_summary_max_stmt_count(默认 3000 ), 就会查到 半个月前的数据。

顺手的话可以给官网提个 修改建议~

2 个赞

改大tidb_stmt_summary_max_stmt_count

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。