sqlite 标签归档

共 23 篇文章 · 返回首页

数据库内核实验索引

汇总本站数据库内核文章:PostgreSQL / MySQL InnoDB / 列存、湖仓、流处理、查询引擎、RocksDB、向量、Redis、全文检索、TiKV/HTAP、FoundationDB、SQLite 与 WiredTiger 内核,以及 LSM-Tree 实验与其它单篇。

【SQLite 内核】WAL 与 checkpoint:追加日志与读写并发

钉住 SQLite WAL 模式如何反转 rollback journal 的读写关系:原始内容留在主文件、新内容追加到 -wal,checkpoint 才把帧搬回主文件;用本机 3.53.2 实测 journal_mode=WAL 切换与 passive/truncate checkpoint 的真实帧数,读放大与 checkpoint 频率的取舍留作开放问题。

【SQLite 内核】锁状态与 shared cache:五态锁阶梯与 writer starvation

钉住官方 File Locking And Concurrency 文档定义的 UNLOCKED/SHARED/RESERVED/PENDING/EXCLUSIVE 五态锁阶梯:谁能与谁共存、PENDING 如何防写者饿死、Pager 为何只跟踪四态;用本机 3.53.2 真实双连接冲突实验验证,shared cache 与 WAL 差异只点边界,留给第 8、10 篇。

【SQLite 内核】事务与隔离:DEFERRED/IMMEDIATE/EXCLUSIVE 与单写者快照

拆解 BEGIN DEFERRED/IMMEDIATE/EXCLUSIVE 三种模式的取锁时机差异,对照 Berenson et al. SIGMOD 1995 的隔离词汇与官方 Isolation In SQLite 文档;说明单写者约束下 WAL 快照为何天然回避 write skew,并用本机 3.53.2 实测三种 BEGIN 均可提交。

【SQLite 内核】查询计划器与统计:没有 ANALYZE 时的启发式与代价估计边界

钉住 EXPLAIN QUERY PLAN 的 SEARCH/SCAN 判定、ANALYZE 写入 sqlite_stat1/stat4 的具体语义,以及没有统计时 SQLite 用什么默认猜测(表大小猜一百万行、重复度猜 10);对照官方 N3 join 排序算法与 PG 式穷举代价优化器的复杂度边界,本机 3.53.2 实测覆盖两条 EQP 路径。

【SQLite 内核】索引与 covering scan:什么时候真的省掉了第二次查找

钉住 covering index 消除的具体开销:第 4 篇 index b-tree 只存 key+rowid,命中后仍要回表这一次二次查找;用本机 3.53.2 实测 SELECT 列是否全部落在索引内如何改变 EQP 输出,并区分语句级自动索引与 sqlite_autoindex_* 约束索引这两个常被混淆的概念。

【SQLite 内核】ATTACH / 多库边界:跨库事务的原子性在 WAL 下会退化

钉住 ATTACH DATABASE 的命名空间规则、super-journal 如何让跨文件事务在 rollback journal 模式下保持原子,以及官方文档明确写明的一条反常识边界:main 库或任一 attached 库切到 WAL 后,跨库事务只在单文件粒度原子,崩溃中间态可能只改了一部分文件;本机 3.53.2 实测跨库 JOIN、跨库事务提交与 DETACH 锁冲突。

【SQLite 内核】完整性检查与损坏恢复:integrity_check 与修复边界

拆解 PRAGMA integrity_check/quick_check 的检查范围与复杂度差异,对照官方 How To Corrupt Your Database Files 列出的四类常见损坏来源;用本机 3.53.2 实测一个刻意损坏的数据库,比较 .recover 与 .dump 在数据丢失时的真实行为差异,钉住“修复=尽力抢救,不是万能恢复”的边界。

【SQLite 内核】在线备份与 sqlite3_backup:与 cp 热拷贝的语义差

拆解 sqlite3_backup_init/step/finish 与 CLI .backup 如何在不停机的前提下拿到一致快照;用本机 3.53.2 实测 .backup 后备份库 count(*)=3、integrity_check=ok,并实测对比:在写事务打开期间用 cp 拷贝主文件,物理文件已经比头部记录的逻辑页数更大。

【存储工程】嵌入式存储引擎对比

当我们提到"数据库"时,多数人首先想到的是 MySQL、PostgreSQL 这类以独立进程运行的数据库服务器。客户端通过网络协议连接到服务器,服务器管理存储、索引、事务和并发控制。然而,还有一类存储系统以库(Library)的形式直接链接到应用进程中,不需要独立的服务器进程,不需要网络通信,不需要序列化和反序列化——…