Small. Fast. Reliable.
Choose any three.

SQLite 3.12.0的默认页面大小更改

1.0引言

SQLite数据库文件由一个或多个“页面”组成。对于单个数据库文件,所有页面的大小都是相同的,但是对于不同的数据库文件,页面大小可以是512到65536(含)之间的任何2的幂。

由于SQLite数据库文件格式是在2003年设计的,因此新数据库的默认页面大小为1024字节。在2003年,这是一个合理的选择。但是在现代硬件上,一个4096字节的页面是一个更快,更好的选择。因此,从SQLite版本3.12.0(2016-03-29)开始,新数据库文件的默认页面大小已增加到4096字节。

传统 上,数据库高速缓存大小的上限默认为2000页。SQLite版本3.12.0还将默认设置更改为“ -2000”,这意味着2000 * 1024字节,与页面大小无关。因此,用于页面缓存的内存量的上限不变。

2.0不是兼容性中断

SQLite默认行为的这些更改不是兼容性中断。较新版本的SQLite仍可读取和写入所有旧数据库文件,而较旧版本的SQLite库仍可读取和写入所有新创建的数据库文件。唯一要更改的是一些默认设置。这应该导致许多应用程序的性能提高。

尽管大多数应用程序都不会注意到任何更改(除非它们运行得更快一点),但是如果出现问题,则可以使用C编译器的以下选项在编译时恢复旧版行为:

-DSQLITE_DEFAULT_PAGE_SIZE = 1024 
-DSQLITE_DEFAULT_CACHE_SIZE = 2000

页面大小和缓存大小也可以在运行时分别使用page_size pragmacache_size pragma进行设置或更改 。

3.0此更改可能带来的负面后果

对于每个表和每个索引,SQLite数据库的最小大小为一页。如果页面大小较大,则给定架构的空数据库的大小将增加四倍。但是,一旦数据库开始填充内容,则较旧的1024字节页面数据库和较新的4096字节页面数据库的大小将迅速收敛。由于严格的装箱限制,一旦添加大量内容,4096字节的页面大小实际上可能会导致文件更小。