MySQL内部手册// 记录存储帧的布局(记录,记录块)

21.3.1记录存储框架的布局(记录,记录块)

MI_MIN_BLOCK_LENGTH 20 / * 20字节所需的最大帧类型:删除的块。* / MI_MAX_BLOCK_LENGTH 16777212 / * 16 mb - 4,麦克斯3字节长度,4字节对齐。/ * * / MI_DYN_ALIGN_SIZE 4帧开始一个4字节边界。* /
头部分[0](十进制或十六进制,一个字节):
0/00:删除块block_len 3个字节[1 - 3]next_filepos 8个字节[4]prev_filepos 8个字节[19]= > 20头长度
1/01:完整的记录,小块rec_len, data_len block_len 2字节(1 - 2)= > 3头长度
2/02:全记录,全块rec_len data_len block_len 3字节[1 - 3]= >头长度4
3/03:完整的小记录,未使用的空间rec_len data_len 2字节(1 - 2)unused_len 1字节[3]= >头长度4
4/04:完整的记录,未使用的空间rec_len data_len 3个字节[1 - 3]unused_len 1字节[4]= >头长度5
5/05:从小事做起记录rec_len 2字节(1 - 2)data_len block_len 2字节(3 - 4)next_filepos 8个字节(5 - 12)= >头长度13
6/06:开始大记录rec_len 3个字节[1 - 3]data_len block_len 3个字节[4 - 6]next_filepos 8个字节(7 - 14)= > 15头长度
7/07:结束小记录,完整的块data_len, block_len 2字节(1 - 2)= > 3头长度
8/08:结束大记录,完整的块data_len block_len 3字节[1 - 3]= >头长度4
9/09:结束小记录,未使用的空间data_len 2字节(1 - 2)unused_len 1字节[3]= >头长度4
10/0A:结束大记录,未使用的空间data_len 3个字节[1 - 3]unused_len 1字节[4]= >头长度5
11/0B:继续小记录data_len block_len 2字节(1 - 2)next_filepos 8个字节(3 - 10)= >头长度11
12/0C:继续大纪录data_len block_len 3个字节[1 - 3]next_filepos 8个字节[4]= >头长度12
13/0D:开始巨头记录rec_len 4字节(1 - 4)data_len block_len 3个字节[5 - 7]next_filepos 8个字节(地位)= >头长度16

block_len不包括标题除了删除块长度。在删除块block_len包括头长度。

data_len在这个块的字节数是记录的一部分。

rec_len总记录长度是包括所有属于块的数据长度。

在删除块next_filepos和prev_filepos双向链表删除模块。在列表开始,prev_filepos HA_OFFSET_ERROR(所有比特)。列表末尾,next_filepos HA_OFFSET_ERROR(所有比特)。

在non-deleted块next_filepos点到下一个记录的一部分。

动态记录的读函数块头mi_dynrec.c: _mi_get_block_info ()。