analyze 版本切换问题

【TiDB 版本】

  • v8.1.1

【问题】

  • 当前 analyze 版本 tidb_analyze_version = 1 ,因为偶尔索引走错导致慢速的问题,打算切换到 version 2,据说 analyze 速度和准确性都会提升。

  • 但是官方文档介绍切换的过程可能会出现没有统计信息的情况,这样可能会导致大量慢速影响网站访问:

  • 请教一下,如果直接设置 tidb_analyze_version = 2,是否会导致所有表的统计信息失效,直至所有表全部重新 analyze 完成。但是因为很多大表,不一定能够很快完成。这种情况下应该怎么操作,或者有什么更好的方法吗?

按描述是会导致所有表重新analyze。建议在业务低峰期进行切换。

那很恐怖啊,如果 analyze 没按么快的话 :cold_sweat:

可以分批次 ANALYZE 核心表,循序渐进的修改,避免一次性影响所有表。

临时设置 tidb_analyze_version = 2 (SESSION 级别):

SET SESSION tidb_analyze_version = 2;

这一步只是将当前会话的 ANALYZE 版本设置为 2,不会影响其他会话或全局设置。
然后手动对核心表执行 ANALYZE: 针对你识别出的关键表,逐个或分批次手动执行 ANALYZE TABLE 命令。

之后再进行全局设置:

SET GLOBAL tidb_analyze_version = 2;

这一步会使后续所有的自动分析和手动分析都默认使用 Version 2。

1 个赞

顺便请教下,analyze table 执行期间,是不是会先清除之前的统计信息,可能会引发索引选择错误的问题

我是发现version2 对于一些表达统计差,经常走全表,往verison 1切的 :joy: