Offset | Size | Description |
---|---|---|
0 | 16 | Header string |
16 | 2 | Page size in bytes |
18 | 1 | File format write version |
19 | 1 | File format read version |
20 | 1 | Bytes reserved at the end of each page |
21 | 1 | Max embedded payload fraction |
22 | 1 | Min embedded payload fraction |
23 | 1 | Min leaf payload fraction |
24 | 4 | File change counter |
28 | 4 | Reserved for future use |
32 | 4 | First freelist page |
36 | 4 | Number of freelist pages |
40 | 60 | 15 4-byte meta values |
这是每一个元素的详细解释:
Header string
16字节字符串:“SQLite format 3”
Page size
页大小
File format
在偏移18、19的两字节用来表示文件格式版本。在目前的SQLite版本中都为1,如果以后文件结构改变了,这些数字会变为新的文件格式版本号。
reserved space
SQLite在每一页的最后预留一个很小的空间(小于255字节),这个值存储在偏移20的位置,默认值是0。当数据库使用加密技术是这个值非零。一个页的第一部分(页大小减去预留的大小)是数据库内容存储的可用空间。
embedded payload
嵌入式系统的有效载荷值的最大值(偏移为21的位置)是一个页中所有可用空间的数量,它可以被一个B/B+tree内部节点的一个单元(single entry)使用。255表示100%,默认最大嵌入式有效载荷值是64(25%)。这个值是为了限制一个单元的最大值,使4个单元适用于一个节点。如果一个单元的有效载荷大于最大值,额外的有效载荷会溢出到溢出页。一旦SQLite分配一个溢出页,它移动尽可能多的字节到溢出页,直到一个单元的值跌到嵌入式有效载荷的最小值(在偏移22的位置)。默认值是32(12.5%)。
The max embedded payload fraction value (at offset 21) is the amount of the total usable space in a page that can be consumed by a single entry (called a cell or record) of a standard B/B+-tree internal node. A value of 255 means 100 percent. The default max embedded payload fraction value is 64 (i.e., 25 percent): the value is to limit the maximum cell size so that at least 4 cells fit on one node. If the payload for a cell is larger than the max value, then extra payload is spilled into overflow pages. Once SQLite allocates an overflow page, it moves as many bytes as possible into the overflow page without letting the cell size to drop below the min embedded payload fraction value (at offset 22). The default value is 32, i.e., 12.5 percent.
The min leaf payload fraction value (at offset 23) is like the min embedded payload fraction, except that it is for B+-tree leaf pages. The default value is 32, i.e., 12.5 percent. The max payload fraction value for a leaf node is always 100 percent (or 255), and is not specified in the header. (There are no special-purpose leaf nodes in B-trees.)
-
The file change counter (at offset 24) is used by transactions. That value is incremented by every transaction. This value is intended to indicate when the database has changed so that the pager can avoid having to flush its cache, though that feature has not been implemented as of this writing. The pager is responsible for incrementing this value.
File change counter
文件改变计数器(在偏移24处)用于事务。这个值随着每一次事务增长。这个值用来表示数据库改变以至于pager要避免不得不清除cache,然而这个特征还没有实施在写操作之后,这个pager负责增加这个变量的值。
Freelist
没有用的页的空闲链表在文件头的32位移处。空闲页的总数存储在位移36处。这个空闲链组织为一个有根的树结构。空闲链表中的页有两种:树页(trunk pages)和叶子页(leaf pages)。这个文件头指向这个链的第一个树页。每一个树页(trunk page)指向多个叶子页(leaf page),每一个叶子页内容未指明。