statements_summary_history中DIGEST的条数不对

%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_16158163922019

我的配置如上图所示,每半个小时 statements_summary表一般会有1000多条DIGEST。
但是在这个统计周期结束后,过一会,比如10:00开始10:30结束一个周期,10:50去statements_summary_history表里查看SUMMARY_BEGIN_TIME为10:00的digest条数就只剩下几十条了。

但是我理解我的tidb_stmt_summary_history_size配置的96,应该可以至少可以存两天的digest。
请问这是bug么,还是我理解的有问题?

我的配置是v4.0.9

如果count(*) statements_summary 表有多少记录呢?

就是这个样子的,当前聚合段应该是准的,但是history感觉是很快就被删了大部分。。

我上面的截图那样,history几乎不能用,麻烦看一下。。

多谢,麻烦再上传一张这个截图,您应该保留96小时,正好可以看下昨天17:30 当前的数据信息,多谢。

刚截得,缩的比较小。。你放大看下

可以帮忙确认下,statments_summary_history 是否保存了 2 天的数据? cluster的可能没有保存。麻烦确认下,多谢。


我直连的一台tidb的执行的,还是这样的

可能查询的表不对,请查看CLUSTER_STATEMENTS_SUMMARY_HISTORY这张表

statements_summary 最大保存条数 tidb_stmt_summary_max_stmt_count 指的是保留的所有 SQL 的种类,而不是单个时间段的种类。也就是说,可能由于新的 SQL 进来,把旧的 SQL 刷下去了。
可以查询
select count(distinct schema_name, digest, plan_digest) from information_schema.statements_summary_history where digest_text != ‘commit’;
先看看大体的种类。

@xbthink 你好, STATEMENTS_SUMMARY_HISTORY 表无法保证能保存2天完整的数据,具体限制是:

  1. 最多保存 tidb_stmt_summary_max_stmt_count 个 digest 的statement. 用 LRU 策略删除最旧的 digest 数据。
  2. 每个 digest statement 保存 tidb_stmt_summary_history_size * tidb_stmt_summary_refresh_interval 时间段的数据。

以你当前的配置为例,

  • 如果 2 天内,所有总的 digest statement 数量不超过 4000 条,那么可以保存 2 天的完整数据。
  • 如果 2 天内,所有总的 digest statement 数量超过了 4000 条,那么 history 表中的统计就是不准的了,因为有些 digest statement 已经被清理掉了。

目前的建议调大 tidb_stmt_summary_max_stmt_count

我们也在做一个功能用来记录 某个时间段内,被清理了多少个 digest statements, 方便用户更具这个信息来调整 tidb_stmt_summary_max_stmt_count 值。

我明白了,我再调大tidb_stmt_summary_max_stmt_count观察一下。
感觉文档上这个地方说明可以优化一下。。现在容易让人误解是只限制statements_summary表的
多谢大家:grinning:

:+1:

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