InnoDB是MySQL的重要存储引擎,为数据提供了很好的稳定性。一方面,它借鉴了很多ORACLE特性,另一方面InnoDB也有很多自己的特点诸如Insert buffering、Double write等[2]。了解InnoDB的内部机制,可以帮助我们更好的配置和优化它。本文概述了InnoDB的表空间的结构,算是深入了解的第一步。上图先:
- 在配置文件中可以配置InnoDB的表空间[1],一般格式如下(共享表空间):
datadir = /opt/mysql/data
innodb_data_file_path=ibdata1:1G;ibdata2:1G;ibdata3:1G;ibdata4:1G;ibdata5:1G - 完整的表空间,会被分成如下结构供给InnoDB使用。最小单位是page,每个page为16K;64个连续的page组成一个extent;多个extent和page构成一个segment。Segment初始时InnoDB会为它分配32个pages,之后根据需要会将extent分配给segment,单次最多会分配4个extends给segment。[1]
- 具体的,InnoDB中一个索引(B-tree)由两个segment组成。其中,所有的叶子节点(leaf nodes)存放在一个segment中,所有的非叶子节点(nonleaf nodes)存放在一个segment中。[1]
- 一个存放记录(row)的page,由page header、page trailer、page body组成。如下图:[2]
- 相关的InnoDB的参数:innodb_data_file_path。
参考文献:
- http://dev.mysql.com/doc/refman/5.0/en/innodb-file-space.html
- InnoDB Internals: InnoDB File Formats and Source Code Structure,MySQL Conference, April 2009, Heikki Tuuri CEO Innobase, Calvin Sun Principal Engineer, Oracle Corporation
Leave a Reply