Innodb表空间

Innodb有两种管理表空间的方法mysql

  独立表空间:每一张表都会生成独立的文件来进行存储,每一张表都有一个.frm表描述文件,和一个.ibd文件。其中ibd文件包括了单独一个表的数据内容和索引内容。sql

  共享表空间:某一个数据库的全部表的数据和索引文件都放在一个文件下,默认的文件是.ibdata1文件,初始值是10M,默认是存放在数据文件的根目录下(mysql/var)。数据库

在性能和运维上独立表空间比共享的表空间有不少优点运维

 共享表空间性能

  优势:操作系统

    表空间能够分红多个文件存放到各个磁盘,因此表也就能够分红多个文件存放在磁盘上,表的大小不受磁盘大小的限制(不少文档描述有点问题)。blog

    数据和文件放在一块儿方便管理索引

   缺点:文档

    多个表及索引在表空间中混合存储,这样对于一个表作了大量删除操做后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。innodb

    共享表空间分配后不能回缩

    进行数据库的冷备很慢,mysqldump是一个好的处理方式

独立空间

  优势:  

  1. 每一个表都有自已独立的表空间。
  2. 每一个表的数据和索引都会存在自已的表空间中。
  3. 能够实现单表在不一样的数据库中移动。
  4. 空间能够回收

  缺点:

    单表增长过大,响应也是较慢,可使用分区表

    单表增长过大,当单表占用空间过大时,存储空间不足,只能从操做系统层面思考解决方法

共享表空间和独立表空间之间的转换  

1.查看当前表空间状况:

show variables like '%per_table';

ON表明独立表空间管理,OFF表明共享表空间管理;

2.修改数据库的表空间管理方式

  修改配置文件 ,在/etc/my.cnf文件中设置

    innodb_file_per_table=1 为使用独占表空间

    innodb_file_per_table=0 为使用共享表空间

  重启mysql

3.共享表空间转化为独立表空间的方法

  (1)须要设置innodb_file_per_table=1

  (2)单个表 

      alter table table_name engine=innodb;

    不少表

      先把数据库导出,而后删除数据再进行导入操做,该操做能够用mysqldump进行操做

总结:

  通过以上操做便完成数据库的存储空间的转换

  当数据量很小的时候建议使用共享表空间的管理方式。数据量很大的时候建议使用独立表空间的管理方式 

相关文章
相关标签/搜索