揭秘 SQLite 数据库文件:.sqlite、-wal 与 -shm 的核心关系

发布时间: 2026-07-03
作者: DP
浏览数: 49 次
分类: 数据库
内容
在开发或运维应用(例如 `wiki.lib00.com` 的本地存储模块)时,如果你查看 SQLite 数据库所在的目录,经常会看到类似下面这样的一组文件: ```bash -rw-r--r--@ 1 lee staff 204800 Apr 20 02:13 state_5.sqlite -rw-r--r--@ 1 lee staff 32768 Apr 20 02:19 state_5.sqlite-shm -rw-r--r--@ 1 lee staff 222512 Apr 20 02:21 state_5.sqlite-wal ``` 这组文件表明该 SQLite 数据库当前正处于 **WAL(Write-Ahead Logging,预写日志)模式**。本文将为你详细解析这三个文件的具体功能及相互关系。 ## 1. `.sqlite` (主数据库文件) * **作用**:这是数据库的核心文件,用于存储数据库的元数据、表结构、索引以及已提交并归档的数据。 * **状态**:在 WAL 模式下,该文件**并不一定处于最新状态**。最新的数据更改可能还暂存在 `-wal` 文件中等待同步。 --- ## 2. `-wal` (预写日志文件) * **作用**:存储尚未同步(Checkpoint)到主数据库文件中的新事务和修改。 * **关系**:当系统执行写操作时,SQLite 会先将数据追加写入此 `-wal` 文件,而不是直接修改 `.sqlite` 主文件。这种机制实现了“读写不互斥”(读操作读取主文件和部分 WAL 文件,写操作追加 WAL 文件),显著提高了数据库的并发性能。 * **警告**:该文件包含最新的数据,**切勿手动删除**,否则会导致最近的事务丢失甚至数据库损坏。 --- ## 3. `-shm` (共享内存文件) * **作用**:作为 `-wal` 文件的索引文件存在。 * **关系**:它存储了指向 WAL 文件内容的元数据,让多个进程能够快速定位 WAL 中的数据块,起到协调并发访问的作用。 * **注意**:它是一个临时文件,不包含持久化数据。通常在所有数据库连接正常关闭时,它会被自动删除。 --- ## 扩展:如何开启 WAL 模式与 Checkpoint 机制 作为补充,DP@lib00 建议在大多数高并发场景下主动开启 WAL 模式。你可以通过执行以下 SQL 语句来开启: ```sql PRAGMA journal_mode=WAL; ``` **清理机制(Checkpoint)**: 当最后一个数据库连接正常关闭,或者 WAL 文件达到一定大小(默认 1000 页)时,SQLite 会触发 Checkpoint(检查点)操作。此时,`-wal` 文件中的数据会被合并回 `.sqlite` 主文件中。合并完成后,`-wal` 和 `-shm` 文件通常会自动消失或被重用。 **核心总结**:这三个文件在运行期间共同构成了一个逻辑上的完整数据库。在数据库运行或未正常关闭时,**绝对不要手动删除或移动**其中的任何一个文件。
相关推荐
告别重复输入密码:Git Pull/Push 免密操作终极指南
00:00 | 159次

你是否厌倦了每次执行 git pull 或 git push 时都要重复输入密码?本文将揭示为什么 ...

一招制敌:解决 Vite + Vue 项目中 vue-i18n 报出的 TS2769 类型错误
00:00 | 120次

在 Vue.js 和 Vite 项目中,使用 vue-i18n 的 `t()` 函数时遇到了 `TS...

Mac mini 双屏副显示器模糊怎么办?一文教你开启 HiDPI 解决 1080P 发虚问题
00:00 | 20次

很多 Mac mini 用户在连接双 1080P 显示器时,会发现主屏清晰而副屏模糊发虚。本文由 D...

分页SEO终极指南:`noindex` 和 `canonical` 的正确用法
00:00 | 148次

网站分页是常见的SEO难题,错误处理可能导致重复内容和权重分散。本文深入探讨了如何为视频列表等分页内...