图说:InnoDB之表空间

2009-08-12  |  10:29分类:MYSQL  |  标签:  |  1,038 views

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
喜欢本文,那就收藏到: Del.icio.us Google书签 Digg Live Bookmark Yahoo书签 Facebook 百度搜藏 添加到饭否 QQ书签 Digbuzz我挖网

2条评论 关于 “图说:InnoDB之表空间”

  1. 玄月 发表于: 八月 28th, 2009 17:25

    第一点说明中,是共享表空间。
    独享表空间是要设置innodb_file_per_table=1

  2. orczhou 发表于: 九月 14th, 2009 16:50

    3KS 弄错了 已经改过了


发表您的评论