执行计划在健康度99的情况下出现大量pseudo estimation

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

你可以参考下:

https://docs.pingcap.com/zh/tidb/v4.0/statistics#自动更新
https://docs.pingcap.com/zh/tidb/v4.0/troubleshoot-cpu-issues#tidb-执行计划不对导致延迟增高
https://book.tidb.io/session4/chapter6/sql-optimization-cases.html#案例2-执行计划不稳定导致查询延迟增加

analyze 对性能还是有比较大的影响的,一般都是建议定时触发

  • 手动 analyze table,配合 crontab 定期 analyze,维持统计信息准确度

查下这个参数,是不是默认的

另外:

在 TiDB 中 auto analyze 的触发策略是怎样的?

触发策略:新表达到 1000 条,并且在 1 分钟内没有写入,会自动触发。

当表的(修改数/当前总行数)大于 tidb_auto_analyze_ratio 的时候,会自动触发 analyze 语句。 tidb_auto_analyze_ratio 的默认值为 0.5,即默认开启此功能。为了保险起见,在开启此功能的时候,保证了其最小值为 0.3。但是不能大于等于 pseudo-estimate-ratio (默认值为 0.8),否则会有一段时间使用 pseudo 统计信息,建议设置值为 0.5。

1分钟应该是指的新表。

有点绕,不过 我理解是 auto analyze 动作会针对“新/旧” 2 种不同类型的表,分别有不同的触发条件(但怎么定义新旧,这里我也不太清楚,严格的定义逻辑)
1、不过我觉得需要确认2个事情,发生 pseudo 的时候,统计信息健康度是 99?
2、tidb-server 日志,应该会有收集统计信息的日志(可以看一下,有无有用信息)
3、其他方面的资料解释,我建议看看 其他 两位同学给的链接

我理解的是没有数据的表,新表只有插入没有修改。所以新表是按插入触发自动收集,旧表是按修改触发自动收集。

1、不能看到历史信息,这个值 其实默认值就比较大了,建议看看是否需要添加手动收集统计信息。hint 、spm 的方式来解决问题(解决问题是重点吧,原因可以放在第二)
2、日志不是说异常,就是想看看有没有收集统计信息的动作

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