1. 前言
最近发现了一款由Jeremy Cole带来的数据库innodb格式化分析工具,此工具的强大之处在于可以将innodb内部存储的信息格式化的解释给大家,让人更清晰的理解INNODB的数据结构.
它是一款非常轻量级的应用,同时存在bug风险,不建议给生产环境使用.但是我们在测试环境就可以很好的了解该工具和该工具带来的便利.
README中是这样说的:
1. 一款学习工具,让你很轻松的理解innodb架构
2. 一款教学工具,通过ruby的irb的交互式界面,可以看到innodb的架构与发生的变化
3. 一款调查工具,InnoDB引擎不会告诉你它在磁盘正在做那些任务或者做过那些任务,例如,我们可以获取页的饱和度,每页具体含有多少记录,B+Tree的具体架构等详细内容
4. 一款调试工具,当一些行为或操作会影响到数据结构的时候,可以通过innodb_ruby工具直观的审查,确保与期望的结果相同
2.安装
2.1
基础环境配置shell# yum install \ glibc-headers \ autoconf \ gcc-c++ \ glibc-devel \ readline-devel \ zlib-devel \ libffi-devel \ openssl-devel \ automake \ libtool \ bison \ sqlite-devel \ ftp://195.220.108.108/linux/centos/6.8/os/x86_64/Packages/libyaml-devel-0.1.3-4.el6_6.x86_64.rpm \ ftp://195.220.108.108/linux/centos/6.8/os/x86_64/Packages/libyaml-0.1.3-4.el6_6.x86_64.rpm shell# curl -L get.rvm.io | bash -s stable shell# source ~/.bashrc shell# source ~/.bash_profile shell# rvm list known shell# rvm install 2.2.0
2.2
以root身份运行:shell# sudo gem install innodb_ruby
以用户身份运行(也可使用root):
shell# gem install --user-install innodb_ruby
或者直接从github上拷贝(不同版本在 https://rubygems.org/gems/innodb_ruby 获取)
shell# git clone https://github.com/jeremycole/innodb_ruby.git shell# cd innodb_ruby shell# ruby -r rubygems -I lib bin/innodb_space ...
3.参数
首先,我们
shell># innodb_space --help |more 可以看到有以下两行样例:
innodb_space -s ibdata1 [-T tname [-I iname]] [options]
innodb_space -f tname.ibd [-r ./desc.rb -d DescClass] [options] <mode>
其中:
"-s" 表示系统表空间名;
"-T" 表示给定的表名;
"-I" 表示给定的索引;
"-f" 表示给定的表空间文件
接下来,我们创建一张表并看几条事例
mysql> show full columns from db.test;
+--------+-------------+-------------------+------+-----+---------+--------------+
| Field | Type | Collation | Null | Key | Default | Comment |
+--------+-------------+-------------------+------+-----+---------+--------------+
| id | int(11) | NULL | NO | PRI | NULL | 自增主键 |
| rannum | varchar(20) | latin1_swedish_ci | YES | | NULL | 随机码 |
+--------+-------------+-------------------+------+-----+---------+--------------+
2 rows in set (0.00 sec)
mysql> select count(*) from db.test;
+----------+
| count(*) |
+----------+
| 24997 |
+----------+
3.1 Space File Structure
system-spaces
shell# innodb_space -s ibdata1 system-spaces name pages indexes (system) 13056 7 db/store 6 1 db/test 768 1 ... 其中,system-spaces是模式名,在该模式下,innodb_space列出所有物理对象的数量,innodb_space 有很多的模式以供选择,我们挑几个主要进行简单说明
space-indexes
shell# innodb_space -s ibdata1 -T db/testspace-indexes id name root fseg used allocated fill_factor 1198 PRIMARY 3 internal 1 1 100.00% 1198 PRIMARY 3 leaf 61 270 22.59% 其中,space-indexes列出了tb表的索引统计信息
space-page-type-regions