下载工具
https://github.com/jeremycole/innodb_ruby
导入测试数据
https://github.com/xiazemin/-innodb_ruby_study
注意不支持mysql 8.0
安装mysql 5.7
切换到mysql的数据存储目录
cd /usr/local/var/mysql5.7/
代码语言:javascript复制innodb_space -s ibdata1 -T zeno3376/t2 space-page-type-regions
start end count type
0 0 1 FSP_HDR
1 1 1 IBUF_BITMAP
2 2 1 INODE
3 17 15 INDEX
18 18 1 FREE (ALLOCATED)
- start:从第几个page开始
- end:从第几个page结束
- count:占用了多少个page;
- type: page的类型 对于InnoDB表空间来说,表空间是有多个区组成的。其中的每个区都由物理位置上连续的64个页组成,因为每个页的大小为16K,所以一个区的大小是1M。
区太多了就难以管理了,所以每256个区组成一个组,按组管理。
1、HSP_HDR类型页
表空间的第一个组的第一个区的第1页是FILE_PAGE_TYPE_FSP_HDR类型页,简称FSP_HDR类型页。
FSP_HDR类型页的file space header部分存储了整个表空间的一些属性和5个链表基节点。
前3个链表基节点是表空间中碎片区对应的XDES Entry结构构成的3个链表的基节点。
后2个链表基节点是表空间中段(Segment)对应的INODE结构所在的INODE页构成的2个链表的基节点。
链表基节点的大小为16字节。
(2)FSP_HDR类型页的XDES Entry部分存储了本组的256个区对应的XDES Entry结构。
2、IBUF_BITMAP类型页
表空间的每个组的第一个区的第2页是FILE_PAGE_IBUF_BITMAP类型页,简称IBUF_BITMAP类型页。
存储本组所有的区的所有页面INSERT BUFFER的信息。
3、INODE类型页
表空间的第一个组的第一个区的第3页是FILE_PAGE_INODE类型页,简称INODE类型页。
(1)INODE类型页的List Node for INODE Page List部分存储了其他INODE类型页面的页号和偏移,构成了链表,总共构成2个链表,链表的基节点就在上面说的HSP_HDR类型页file space header部分的后两个链表基节点。
(2)INODE Entry部分存储了表空间的所有段对应的INDODE Entry结构。
4、XDES类型页
表空间的每个组(除第一组)的第一个区的第1页是FILE_PAGE_TYPE_XDES类型页,简称XDES类型页。
XDES类型页和HSP_HDR类型页基本一致,XDES类型页其实就是HSP_HDR类型页file space header部分为空。
5、Data dictionary Header
系统表空间的第一个组的第一个区的第8页是FILE_PAGE_TYPE_SYS类型页,简称SYS类型页,它记录了Data dictionary Header。
(1)Data Dictionary Header部分存储了基本系统表(basic system tables)的索引的根节点的信息(图中绿色)和一些全局的自增变量。
代码语言:javascript复制innodb_space -s ibdata1 -T zeno3376/t2 -p 3 page-records
Record 126: (id=1782) → #5 Record 140: (id=1890) → #6
1行就代表使用了1个page,所以,叶子节点共使用了9个page,根节点使用了1个page
- id = 1782 代表的就是表中id为1782的记录,因为id是主键
- -> #5 代表的是指向5号page
innodb_space -s ibdata1 -T zeno3376/t2 -p 5 page-records
Record 128: (id=1782) → (name=”zeno”, remark=”mysql”, add_time=:NULL)
Record 162: (id=1783) → (name=”KIK91QJET1FCZ46EJKML”, remark=”H4HJO5F7W5GSSDORT8AAT”, add_time=”184524556-49-63 92:14:08”)
查看record 详细信息
代码语言:javascript复制innodb_space -s ibdata1 -T zeno3376/t2 -p 5 -R 7444 record-dump
Record at offset 7444
Header:
Next record offset : 112
Heap number : 109
Type : conventional
Deleted : false
Length : 8
System fields:
Transaction ID: 1296
Roll Pointer:
Undo Log: page 290, offset 1556
Rollback Segment ID: 46
Insert: true
Key fields:
id: 1889
Non-key fields:
name: "0O2S6OCUC99MQKM1"
remark: "1K5GJEQ5QU83T3F"
add_time: "184524556-52-49 32:71:04"
参考
https://xiazemin.github.io/MyBlog/storage/2021/03/14/innodb_ruby.html