#9109·turso

MVCC 在 ANALYZE 后不重新装入规划器统计

作者: jussisaurio创建于 2026年9月17日更新于 2026年9月17日
标签mvccoptimizer

□ 问题

在MVCC模式中,ANALYZE'写作sqlite stat1',但没有更新关于同一联系的规划者统计数据。

后来的语句使用默认行估计. 这种行为可以选择更昂贵的查询计划.

WAL模式在同一个 " ANALYZE " 语句后重新装入统计数据。

□再现.

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? PRAGMA 日记 mode=mvcc; CREATE T(INTEGER PRIMERIY,价值INTEGER);

(n) 改为 评价(1) 联 合 国 自有n + 1 从下至下 (中文(简体) ). (b) 插入自下而上;

安娜丽兹;

SELECT tbl, idx, stat from sqlite stat1 ; 电站: 电站: 快速计划格式=JSON本身 从t;


`sqlite stat1' 包含正确的行数:

页:1
t||100

该计划仍然使用默认估计:

贾森 "rows per input":1000, (中文(简体) ). "输出-行数":1000000


没有MVCC,同样的声明使用新的统计:

贾森
"rows per input":100, (中文(简体) ).
"输出 rows": 100

□因缘.

声明:步骤()'在ANALYZE ' 完成后称为`重新 分析 数据()'。

当连接有“ 交易国: 写入” 时, 刷新返回 。 MVCC连接在当时仍然有这个状态.

因此,`schema.analysis stats'保持了旧值。

相关代码:core/stats.rs.

□ 预期行为

在自动承诺`ANALYZE ' 语句之后,规划者必须使用新的统计数据来进行关于同一连接的下个语句。

MVCC和WAL必须在此例子中报告100行的估计.

□ 建议的测试

增加一个运行“ANALYZE”的MVCC SQL测试,并在下一个计划中检查行估计数.

内容来源: tursodatabase/turso