加入收藏 | 设为首页 | 会员中心 | 我要投稿 丽水站长网 (https://www.0578zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

innblock 用具 InnoDB page观察利器

发布时间:2022-06-28 00:10:46 所属栏目:MySql教程 来源:互联网
导读:特别鸣谢 笔者是知数堂早期学员,最初有写这么一个工具的想法也得到叶金荣老师的认可和鼓励,这个想法也整整耗掉了好几个晚上的休息时间,这里再次感谢叶金荣老师对工具审核,叶老师的经验和学识是每一位学员宝贵的财富。 感谢主要作者周彦伟、王竹峰、强
  特别鸣谢
  笔者是知数堂早期学员,最初有写这么一个工具的想法也得到叶金荣老师的认可和鼓励,这个想法也整整耗掉了好几个晚上的休息时间,这里再次感谢叶金荣老师对工具审核,叶老师的经验和学识是每一位学员宝贵的财富。
  感谢<>主要作者周彦伟、王竹峰、强昌金对本工具的认可并授权引用部分内容,如果大家对本文的内容感到吃力可以自行参考该书,也可以和书中部分章节配合使用学习。
 
  一、前言
  InnoDB中索引块的内部组织一直是大家比较感兴趣并且乐于研究的东西,我们从很多书籍和文章都不惜笔墨进行大量的描述比如<>中就能感受到作者用了大量篇幅描述什么是slot、什么是heap、记录的逻辑和物理顺序是怎么样的。
 
  但是我们却很难直观的看到,因为数据文件是二进制文件。虽然我们可以通过例如LINUX的hexdump等类似命令进行查看,但是大量的16进制信息很难直观的提取出各种有用的信息,相信不少人和笔者一样都是通过肉眼进行查看,但是这显然是一种吃力又不讨好的方法。
 
  在Oracle中我们可以通过dump block的方法查看block的信息,那么InnoDB是否也可以这样呢?
 
  本着这种让大家更加直观的观察到底层索引块的信息的宗旨,笔者直接借用源码中的各种宏定义,使用C++和STL list容器实现了这样一个工具innblock。由于工作原因不能全身心投入代码编写,代码有些混乱。所以如果有bug还请大家见谅以及提出,笔者会尽快进行更新,感谢。
 
  约定
  index page(索引页、索引块),InnoDB表是基于聚集索引的索引组织表,整个表其实不是聚集索引,就是普通索引。因此InnoDB表空间文件中,数据页其实也是索引页,所以下面我们统称为索引页,英文用page no表示;
 
  二、innblock简介
  本工具有2个功能。
 
  第一个scan功能用于查找ibd文件中所有的索引页。
 
  第二个analyze功能用于扫描数据块里的row data。
 
  先看下 help 输出
 
  ------------------------------------------------------------------------
  [Author]:gaopeng [Blog]:blog.itpub.net/7728585/abstract/1/ [QQ]:22389860
  [Review]:yejinrong@zhishutang [Blog]:imysql.com [QQ]:4700963
  -------USAGE:../innblock Datafile [scan/pageno] Blocksize
  [Datafile]:innodb data file!
  [scan]:physical scan data file to find index level and index block no
  [pageno]:which block you will parse
  [Blocksize](KB):block size of KB general is 16k only 4k/8k/16k/32k
  ------------------------------------------------------------------------
  scan功能
  [root@test test]# ./innblock  testblock.ibd scan 16
  analyze功能
  [root@test test]# ./innblock  testblock.ibd 3 16
  可以执行 innblock help 获得更详细的使用帮助信息。
 
  三、innblock的限制
  不支持REDUNDANT行格式的数据文件;
  只支持LINUX x64平台;
  本工具直接读取物理文件,部分dirty page可能延时刷盘而未能被读取到,可以让InnoDB及时刷盘再重新读取;
  最好在MySQL 5.6/5.7版本下测试;
  只能解析索引页,不支持inode page、undo log等类型的page;
  scan功能会包含delete后的索引块和drop了的索引块.
  不能读取详细的row data;
  建议采用独立表空间模式,更便于观察;
  建议仅在测试环境下学习和研究使用。
  四、 输出信息详解
  我在工具的help文档中也有详细的解释,这里单独对analyze功能解析数据块的输出详解一番,并且我也会给出这些值来自源码的哪个宏定义。这部分知识点在<>中也有详细说明。
 
   基本信息(Block base info)
  [block_no]:page offset no inside space,begin is 0(取自 FIL_PAGE_OFFSET)
  索引页码(index page no),该页相对于表空间的偏移量,从0开始计数。如果page no = 3,则实际上是第4个index page。
  [space_id]:this contains the space id of the page(FIL_PAGE_SPACE_ID)
  本索引页所属的表空间ID,可以在 INNODB_SYS_TABLES、INNODB_SYS_TABLESPACES、INNODB_SYS_DATAFILES 等系统视图中查看。

(编辑:丽水站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读