好久没用 sqlite3
,昨天小用了下,发现除了正常的 .sqlite
外,还有两个 .sqlite-shm
和 sqlite-wal
文件,它们都是做啥的? 能不能删呢?
答案显而易见的,可删除,但最好不要删
sqlite 官网( http://www.sqlite.org/fileformat2.html 有对这两个文件后缀做了说明,大概的意思就是说呀
-
wal
是write ahead log
的缩写,也就是保存的是一个日志,类似于mysql
的binlog.log
文件。 sqlite3.7 之后的版本开始有了这个功能。当一个 sqlite 数据库开启了
write ahead log
功能,那么所有连接数据的操作都必须使用 WAL 模式,然后就会在数据库文件夹 (.sqlite
同目录 ) 下生成一个后缀为.sqlite-wal
的文件保存操作日志。如果你打开这个文件看一眼里面的内容,有点像数据库备份文件。
这个文件的大小有点坑,有时候比数据库还大。
-
当我们开启了
WAL
模式,极端情况下,每次读都需要扫描.sqlite-wal
文件和.sqlite
文件。为了提高性能,WAL 模式中有一个wal-index
文件,这个文件记录了页号和该页在WAL
文件中的偏移,并且wal-index
文件采用共享缓存实现,这个文件名,你应该猜到了,就是.sqlite-shm
。判断 page 是否在 wal 文件存在的操作实质是一次内存读。
wal-index 采用 hash 表存储,因此查询效率也非常高
具体的内容,你们可以看看这篇文章 https://www.cnblogs.com/cchust/p/4754619.html