一个InnoDB文件的解析工具,通过解析InnoDB文件,可以窥探其中很多的奥秘,绝对是一款非常优秀,高逼格的研究InnoDB的工具。但是作者不建议在生产环境使用,因为肯定有BUG,O(∩_∩)O哈哈~,作者写这个工具的主要目的是作为一个学习研究InnoDB的工具。
github地址
Github地址:https://github.com/jeremycole/innodb_ruby
安装
安装比较简单,执行命令即可。安装完成后,执行如下命令验证innodb_ruby是否安装成功:
如果提示ruby版本过低,从淘宝ruby镜像中下载高版本编译安装即可:
建议安装1.9.3-p551版本,因为当我安装了2.2.10版本的ruby后,执行innodb_space还是得到这样的错误信息:/usr/lib/ruby/gems/1.8/gems/bindata-2.4.3/lib/bindata.rb:5: BinData requires ruby >= 1.9.3。相关issue地址:https://github.com/jeremycole/innodb_ruby/issues/40。另外,安装ruby时,一步一步来,确保make以及make install时没有任何error信息。
准备数据
创建表插入数据之前,检查MySQL环境,MySQL建议5.5以上的版本,并且属性值:innodb_file_per_table=ON,innodb_file_format=Barracuda。接下来创建一张表,并借助存储过程插入一些数据:
用法示例
查看索引信息--name为索引名称,fseg为leaf表示属于叶子页的segment:
命令中的/data/mysql是mysql的datadir,yyfax_afei是数据库名称,t_afei是表名称。建议切换到$目录下,那么执行命令时-T的值为即可。
index-level-summary
得到指定level的所有page信息:
我们知道level值和索引树的高度是强相关的(叶子节点的level都是0),所以通过这个命令也可以知道InnoDB索引树高度。由上面执行命令的结果可知,level=3时没有任何数据,而level等于1和2都有,所以示例100w数据的表的索引树高度是3。
space-page-type-regions
统计相同类型页的连续空间,如下所示,start/end表示起始页,count总计占的页数。
通过结果可知,page为0,1,2类型名称分别是:FSP_HDR, IBUF_BITMAP, INODE。从page=3开始才是存放行数据和指针的页。
index-recurse
递归一个索引需要依赖一个ruby脚本文件simple_t_describer.rb,脚本内容如下:
执行如下命令:
这条命令会从root开始,全表扫描,以升序的方式遍历整个B+Tree索引树,遍历过程中会输出每个page以及指针的信息,包括叶子页和非叶子页,由于输出结果行过大(稍微大于表的行数),所以将结果重定向到一个recurseindex.log文件中:
从结果可知,ROOT NODE即根节点是page=3的页。通过space-page-type-regions的分析可知,0,1,2这三个page类型是FSP_HDR, IBUF_BITMAP, INODE。其他的就是INTERNAL节点和LEAF节点。
page-records
统计某一页中的数据。以刚才的结果为例,page=3是root页,这个page的数据如下,由结果可知,page=3有两个record,与recurseindex.log的结果是吻合的(ROOT NODE #3: 2 records, 26 bytes):
从这个结果也能看出来,root页是不保存具体数据,只保存主键索引的值和指针。
我们再从recurseindex.log中找几个LEAF节点,如下所示,page=1770,1771这些都是LEAF节点:
其中,page=1770的部分数据如下,一个页大概能574条记录,而page=1774还没有填满,只有379条数据:
从这个结果也能看出来,叶子页会保存具体数据,不只是主键,非主键其他列(num列)的数据也有保存。
tree height
根据通过innodb_space得到的结果,我们大概能计算出索引树的高度,假设树的高度是h:
百万级数据量的表,574^h=1000000。即h=2.17,所以百万级数据量且主键是int类型的表的索引树高度是3。
十万级数据量的表,574^h=100000。即h=1.81,所以十万级数据量且主键是int类型的表的索引树高度是2。
下面是笔者对一张十万数据量的表做得测试,通过结果可以看出level=0或者1都有结果,level=2没有结果,所以索引树高度是2:
领取专属 10元无门槛券
私享最新 技术干货