SQLite 3.54 的 diskused 要编译开关,而 sqlite3_analyzer 从不需要
来源:dev.to — 2026-10-18
📋 概述
SQLite 3.54.0 在 10 月 9 日发布,变更日志里有一行很容易被扫过去:sqlite3_analyzer 被弃用,取而代之的是内置的 diskused() 函数和 shell 里新增的 .diskused 点命令。作者想知道这到底省了什么、又付出了什么,于是把两个版本都从源码编出来,对同一个 20MB、四张表一个索引 35 万行的库各跑五次:.diskused 平均 0.025 秒,老工具 0.061 秒——同样一份报告,用时不到一半。但真正值钱的是他发现的那个坑:如果编译时没开 SQLITE_ENABLE_DBSTAT_VTAB,.diskused 会静默失败,不报错也不输出任何东西。他还测了并发场景,结论是没有任何变化。
🔑 核心要点
- 同样的磁盘占用报告:.diskused 平均 0.025 秒,sqlite3_analyzer 0.061 秒。
- 缺 SQLITE_ENABLE_DBSTAT_VTAB 编译开关时,.diskused 无报错、无输出,静默失败。
- 并发场景下没有改善——优化只体现在冷启动的 b-tree 遍历上。
- 两版都从源码构建,同一份数据文件跑五次取均值,而不是跑一次就下结论。
💡 金句
It fails, and tells you nothing about it.
译:它失败了,而且一个字都不告诉你。
← 返回 dev.to 首页