现在的位置: 首页 > 综合 > 正文

图说InnoDB之表空间

2018年05月03日 ⁄ 综合 ⁄ 共 972字 ⁄ 字号 评论关闭

InnoDB是MySQL的重要存储引擎,为数据提供了很好的稳定性。一方面,它借鉴了很多ORACLE特性,另一方面InnoDB也有很多自己的特点诸如Insert buffering、Double write等[2]。了解InnoDB的内部机制,可以帮助我们更好的配置和优化它。本文概述了InnoDB的表空间的结构,算是深入了解的第一步。上图先:

TableSpaceInnoDB

  1. 在配置文件中可以配置InnoDB的表空间[1],一般格式如下(共享表空间):

    datadir = /opt/mysql/data

    innodb_data_file_path=ibdata1:1G;ibdata2:1G;ibdata3:1G;ibdata4:1G;ibdata5:1G
  2. 完整的表空间,会被分成如下结构供给InnoDB使用。最小单位是page,每个page为16K;64个连续的page组成一个extent;多个extent和page构成一个segment。Segment初始时InnoDB会为它分配32个pages,之后根据需要会将extent分配给segment,单次最多会分配4个extends给segment。[1]
  3. 具体的,InnoDB中一个索引(B-tree)由两个segment组成。其中,所有的叶子节点(leaf nodes)存放在一个segment中,所有的非叶子节点(nonleaf nodes)存放在一个segment中。[1]
  4. 一个存放记录(row)的page,由page header、page trailer、page body组成。如下图:[2]
    page_with_rows
  5. 相关的InnoDB的参数:innodb_data_file_path。

参考文献:

  1. http://dev.mysql.com/doc/refman/5.0/en/innodb-file-space.html
  2. InnoDB Internals: InnoDB File Formats and Source Code Structure,MySQL Conference, April 2009, Heikki Tuuri CEO Innobase, Calvin Sun Principal Engineer, Oracle Corporation

     转自:http://www.orczhou.com/index.php/2009/08/image-innodb-tablespace/

抱歉!评论已关闭.