揭秘 SQLite 数据库文件:.sqlite、-wal 与 -shm 的核心关系
内容
在开发或运维应用(例如 `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` 文件通常会自动消失或被重用。
**核心总结**:这三个文件在运行期间共同构成了一个逻辑上的完整数据库。在数据库运行或未正常关闭时,**绝对不要手动删除或移动**其中的任何一个文件。
关联内容
MySQL分区终极指南:从创建、自动化到避坑,一文搞定!
时长: 00:00 | DP | 2025-12-01 08:00:00时间戳 (Timestamp) vs. 日期 (Date):给新手的终极指南
时长: 00:00 | DP | 2026-08-01 22:02:20百万级PV日志表优化实战:从VARCHAR到TINYINT的华丽转身
时长: 00:00 | DP | 2025-12-30 23:18:20揭秘隐藏成本:MySQL InnoDB索引到底占用多少存储空间?
时长: 00:00 | DP | 2026-02-01 08:38:42MySQL整数类型揭秘:SMALLINT与MEDIUMINT的范围与最佳实践
时长: 00:00 | DP | 2026-03-03 19:25:01相关推荐
告别重复输入密码: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难题,错误处理可能导致重复内容和权重分散。本文深入探讨了如何为视频列表等分页内...