innodb结构解析工具---innodb_ruby
1.下载ruby并安装ruby:
ftp://ftp.ruby-lang.org/pub/ruby/
ftp://ftp.ruby-lang.org/pub/ruby/ruby-2.3-stable.tar.gz
tar -xvf ruby-2.3-stable.tar.gz
cd ruby-2.3.1
./configure
make
make install
2.下载rubygems:
https://rubygems.global.ssl.fastly.net/rubygems/rubygems-2.6.4.zip (到https://rubygems.org/ 首页找的rubygems下载地址)
cd rubygems-2.6.4
ruby setup.rb
3.下载并安装innodb_ruby
https://rubygems.org/gems/innodb_ruby (进入rubygems官网去找下载链接)
https://rubygems.global.ssl.fastly.net/gems/innodb_ruby-0.9.13.gem (浏览器下载)
wget https://rubygems.global.ssl.fastly.net/rubygems/rubygems-2.6.4.zip --no-check-certificate (wget下载)
gem install innodb_ruby-0.9.13.gem
- [root@localhost ~]# gem -v
- 2.6.
[root@localhost ~]# gem list |grep innodb
innodb_ruby (0.9.13)
4.innodb_ruby使用文档:
https://github.com/jeremycole/innodb_ruby/wiki
https://blog.jcole.us/2013/01/03/a-quick-introduction-to-innodb-ruby/
https://blog.jcole.us/2014/10/02/visualizing-the-impact-of-ordered-vs-random-index-insertion-in-innodb/
http://luodw.cc/2016/03/15/innodb03/
5.实例:
- 进入到mysql数据目录:/data
- [root@localhost data]# innodb_space -s ibdata1 system-spaces
- name pages indexes
- (system)
- mysql/innodb_index_stats
- mysql/innodb_table_stats
- mysql/slave_master_info
- mysql/slave_relay_log_info
- mysql/slave_worker_info
- test/t1
- test/test1
- test/test_auto_increment
- test/test_char
- test/test_ci
- test/test_int_n
- test/test_time
- test/test_unsigned
- 查看表t1索引
[root@localhost data]# innodb_space -s ibdata1 -T test/t1 space-indexes- id name root fseg used allocated fill_factor
- PRIMARY internal 100.00%
- PRIMARY leaf 100.00%
- [root@localhost data]# innodb_space -s ibdata1 -T test/t1 space-indexes
- id name root fseg used allocated fill_factor
- PRIMARY internal 100.00%
- PRIMARY leaf 100.00%
- You have new mail in /var/spool/mail/root
- [root@localhost data]# innodb_space -s ibdata1 -T test/t1 space-lsn-age-illustrate
- Start Page ╭────────────────────────────────────────────────────────────────╮
- │███████ │
- ╰────────────────────────────────────────────────────────────────╯
- Legend (█ = page):
- Min LSN <─────────────────────────────────────────> Max LSN
- ███████████████████████████████████████████
- $ irb -r innodb
- > sys = Innodb::System.new("ibdata1")
- > idx = sys.index_by_name("test/t1", "PRIMARY")
- > rec = idx.binary_search([])
- [root@localhost data]# innodb_space -s ibdata1 -T test/test1 space-extents-illustrate
- Start Page ╭────────────────────────────────────────────────────────────────╮
- │███▁?? │
- ╰────────────────────────────────────────────────────────────────╯
- Legend (█ = page):
- Page Type Pages Ratio
- █ System 50.00%
- █ Index (test/test1.GEN_CLUST_INDEX) 16.67%
- ? Free space 33.33%
- [root@localhost data]# innodb_space -f test/t1.ibd space-page-type-regions
- start end count type
- FSP_HDR
- IBUF_BITMAP
- INODE
- INDEX
- FREE (ALLOCATED)
- [root@localhost data]# innodb_space -f test/t1.ibd -p page-dump
- #<Innodb::Page::Index:0x007f798307d970>:
- fil header:
- {:checksum=>,
- :offset=>,
- :prev=>nil,
- :next=>nil,
- :lsn=>,
- :type=>:INDEX,
- :flush_lsn=>,
- :space_id=>}
- page header:
- {:n_dir_slots=>,
- :heap_top=>,
- :garbage_offset=>,
- :garbage_size=>,
- :last_insert_offset=>,
- :direction=>:right,
- :n_direction=>,
- :n_recs=>,
- :max_trx_id=>,
- :level=>,
- :index_id=>,
- :n_heap=>,
- :format=>:compact}
- fseg header:
- {:leaf=>
- <Innodb::Inode space=<Innodb::Space file="test/t1.ibd", page_size=, pages=>, fseg=>,
- :internal=>
- <Innodb::Inode space=<Innodb::Space file="test/t1.ibd", page_size=, pages=>, fseg=>}
- sizes:
- header
- trailer
- directory
- free
- used
- record
- per record 14.00
- page directory:
- [, ]
- system records:
- {:offset=>,
- :header=>
- {:next=>,
- :type=>:infimum,
- :heap_number=>,
- :n_owned=>,
- :min_rec=>false,
- :deleted=>false,
- :length=>},
- :next=>,
- :data=>"infimum\x00",
- :length=>}
- {:offset=>,
- :header=>
- {:next=>,
- :type=>:supremum,
- :heap_number=>,
- :n_owned=>,
- :min_rec=>false,
- :deleted=>false,
- :length=>},
- :next=>,
- :data=>"supremum",
- :length=>}
- garbage records:
- records:
- {:format=>:compact,
- :offset=>,
- :header=>
- {:next=>,
- :type=>:node_pointer,
- :heap_number=>,
- :n_owned=>,
- :min_rec=>true,
- :deleted=>false,
- :length=>},
- :next=>}
- {:format=>:compact,
- :offset=>,
- :header=>
- {:next=>,
- :type=>:node_pointer,
- :heap_number=>,
- :n_owned=>,
- :min_rec=>false,
- :deleted=>false,
- :length=>},
- :next=>}
- {:format=>:compact,
- :offset=>,
- :header=>
- {:next=>,
- :type=>:node_pointer,
- :heap_number=>,
- :n_owned=>,
- :min_rec=>false,
- :deleted=>false,
- :length=>},
- :next=>}
- [root@localhost data]# innodb_space -f test/t1.ibd space-index-pages-summary
- page index level data free records
innodb结构解析工具---innodb_ruby的更多相关文章
- Win32汇编-编写PE结构解析工具
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地 ...
- 手写PE结构解析工具
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如 ...
- Golang Json文件解析为结构体工具-json2go
代码地址如下:http://www.demodashi.com/demo/14946.html 概述 json2go是一个基于Golang开发的轻量json文件解析.转换命令行工具,目前支持转换输出到 ...
- MySQL Binlog 解析工具 Maxwell 详解
maxwell 简介 Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis.RabbitMQ.Redis.Goog ...
- (转)AVI文件格式解析+AVI文件解析工具
AVI文件解析工具下载地址:http://download.csdn.net/detail/zjq634359531/7556659 AVI(Audio Video Interleaved的缩写)是一 ...
- Redis源码剖析--源码结构解析
请持续关注我的个人博客:https://zcheng.ren 找工作那会儿,看了黄建宏老师的<Redis设计与实现>,对redis的部分实现有了一个简明的认识.在面试过程中,redis确实 ...
- InfluxDB源码目录结构解析
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 influxdata主目录结构 [root@localhost ...
- redis源代码结构解析
看了黄建宏老师的<Redis设计与实现>,对redis的部分实现有了一个简明的认识: 之前面试的时候被问到了这部分的内容,没有关注,好在还有时间,就把Redis的源码看了一遍. Redis ...
- vue(16)vue-cli创建项目以及项目结构解析
vue-cli创建项目 上一篇我们安装了vue-cli,接下来我们就使用该脚手架进行创建项目 1.进入一个目录,创建项目 创建项目命令如下: vue create <Project Name&g ...
随机推荐
- python 元组问题解决
a = (1,2,{'k1':'b2'}) a[2]['k1'] = 5 print(a) (1, 2, {'k1': 5}) 为什么元素'b2' = 5 应该是元素'k1' = 5 求解 a[2][ ...
- Python中使用中文
python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识.当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了. 先来看看pytho ...
- 转:靠谱的代码和DRY
http://www.cppblog.com/vczh/archive/2014/07/15/207658.html 靠谱的代码和DRY 上次有人来要求我写一篇文章谈谈什么代码才是好代码,是谁我已经忘 ...
- prototype.js 源码解读(02)
如果你想研究一些比较大型的js框架的源码的话,本人建议你从其最初的版本开始研读,因为最初的版本东西少,易于研究,而后的版本基本都是在其基础上不断扩充罢了,所以,接下来我不准备完全解读prototype ...
- 【Java】WEB-INF目录与META-INF目录的作用
/WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/包含了站点所有用的 class 文件,包括 ser ...
- 窗体前端显示(ShowWindowAsync有许多优点)
H:=FindWindow('Tfrm_MainForm','aa'); if H>0 then begin ShowWindowAsync(h,SW_MAX); SetFore ...
- canvas-画图改进版
前几天在canvas——画板中做了个很简陋的画板,只能画简单的线条,可以选择颜色和线条粗度,今天在此简陋的画板上增加了新的形状,撤销,保存,橡皮擦等功能,虽然功能还是很简单,刚接触canvas,过程中 ...
- removeTask
SystemUI中,Home键调出小刷子杀最近任务,整个流程从其RecentsPanelView.java开始: public void handleSwipe(View view) { ... // ...
- SQL Server 2005/2008 触发器的管理和查看
1.通过可视化操作来管理和查看触发器 在Microsoft SQL Server Management Studio中,选中某一数据库的某一张表时,在“对象资源管理器详细”窗口中有“触发器”项.通过“ ...
- Linux学习笔记21——线程同步的两种方式
一 用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...