#34027·yugabyte-db

[YSQL] 为回归测试禁用一次自动分析,而不是每次测试

作者: jasonyb创建于 2026年9月17日更新于 2026年9月18日
标签kind/enhancementarea/ysqlpriority/medium

Jira 链接: DB-23635 ### 描述 尚未确定方向。 将此事项提交以便在一个地方记录问题和证据。团队尚未就是否要这样做达成一致意见,因此请将下面的建议视为讨论的起点。自动分析默认情况下始终打开,无论基于成本的优化器是否打开,并且回归测试不断需要一次次将其关闭。建议在回归测试中一次性禁用它,例如在 BasePgRegressTest 中,并让那些实际运行自动分析的少数测试自行选择重新启用。 ### 为什么回归测试和自动分析不匹配 自动分析服务在自行选择的时刻运行 ANALYZE,因此一个将查询计划、指标或行估计固定下来的测试正在对可能或不可能在查询运行时刷新的统计数据进行断言。失败是一个竞争,因此在 CI 上显示为低频率的异常,在本地通常不显示。 ### 证据表明此问题不断重复 将此功能打开的提交 6760f0c52bf 为 #27462,已经不得不在许多测试中禁用它,并直接指出:自动分析"为测试引入噪声(例如检查指标的测试、检查查询计划的测试)",其中"大多数测试 ... 根据多次 jenkins 运行的结果进行禁用",以及"少数与查询计划相关的测试 ... 采取主动禁用"。该提交分出了四个独立的调查,其中几个仍然处于开放状态: #28393 java 回归错误位置输出, OPEN #28391 Restarting a DDL transaction not supportedERROR: Restart read required, OPEN #28693 TestPgTransactions, OPEN #28389 PgPartman, 关闭 自此以来: #28732 "在更多易出错的测试中禁用自动分析", OPEN。使自动分析更加激进导致更多测试失败,而 b4b77ab1e24 为这些失败的测试禁用了它。 #28731 对 TestPgRegressInsertOnConflictBatch 与自动分析的调查, 关闭。 #32881 flaky TestPgRegressInsertOnConflictBatch9, 由 d911a805dad 关闭,该测试禁用了自动分析。 #34021 flaky TestPgRegressMergeScan, 其中一个后台 ANALYZE 在表达式索引的生命周期内落地导致计划改变。 ### 单个测试方法的当前成本 40 个 java 测试文件将 ysql_enable_auto_analyze 设置为 false, 42 个文件都提到了它。 21 个 src/yb 文件为 C++ 测试禁用了它。 无论是 BasePgRegressTest 还是 BasePgSQLTest 都没有集中禁用它,因此每个新测试都会继承风险,并且只有通过 CI 异常才会发现。 上述每个案例的模式都是一样的:编写了一个测试,它在本地通过,在 CI 上以低频率出现异常,有人花时间对其进行自动分析的二分法,修复是再多一行禁用该标志。一次性禁用它将这种反复出现的成本转化为一次决策。 ### 要权衡的反对意见 自动分析打开是客户集群在启用基于成本的优化器时运行的状态。…

内容来源: yugabyte/yugabyte-db