InnoDB 独立表空间与共享表空间

Posted 虫链Java Library

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了InnoDB 独立表空间与共享表空间相关的知识,希望对你有一定的参考价值。

独立表空间

  • 如果我们开启innodb_file_per_table参数那么表文件空间就会创建于自己的数据文件中,而非创建于共享表空间中。每个数据库会创建一个自己对应的独立表空间。

共享表空间

  • 如果我们没有开启innodb_file_per_table参数那么数据将都会写入到ibdata1文件之中,如果超过了12M,那么还可以自动增长容量。



相关命令

查看数据库的表空间

show variables like 'innodb_data%';

查看当前数据库的表空间管理类型

  • ON代表独立表空间管理,OFF代表共享表空间管理;(查看单表的表空间管理方式,需要查看每个表是否有单独的数据文件)
show variables like "innodb_file_per_table";


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

  • 在my.cnf文件中修改innodb_file_per_table的参数值即可,但是修改不能影响之前已经使用过的共享表空间和独立表空间;
innodb_file_per_table=1
  • 或通过命令
set global innodb_file_per_table=1;

独立表空间


每个表都会生成以独立的文件方式来存储,每个表都一个.frm的描述文件,还有一个.ibd文件。其中这个文件包括了单独一个表的数据及索引内容,默认情况下它的存储在mysql指定的目录下。

优点

每个表都有自己独立的表空间,每个表的数据和索引都会存储在各个独立的表空间中,可以实现单表在不同的数据进行迁移。
表空间可以回收(除了drop table操作,表空不能自己回收),drop table 操作自动回收表空间,如果对统计分析或是日志表,删除大量数据后可以通过 :alter table tablename engin=innodb进行回缩不用的空间。对于使用inodb-plugin的innodb使用truncate table会使用空间收缩。对于使用独立表空间,不管怎么删除,表空间的碎片都不会太严重。

缺点

单表增加过大,如超过100G。对于单表增长过大的问题,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围过大同样会访问多个文件,一样会比较慢。
对于独立表空间也有一个解决办法是:使用分区表,也可以把那个大的表空间移动到别的空间上然后做一个连接。其实从性能上出发,当一个表超过100个G有可能响应也是较慢了,对于独立表空间还容易发现问题早做处理。

共享表空间

某一个数据库所有的表数据,索引文件全部都放在一个文件中,默认这个共享表空间的文件路径在data目录下,默认的文件名为 ibdata1,初始化为10M。

优点

可以将表空间分成多个文件存放在各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同的文件上),数据和文件放在一起方便管理。

缺点

所有的数据和索引存放到一个文件中,将来会是一个很大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对一个表做了大量删除操作后表空间将有大量的空隙,特别是对统计分析、日值系统这类应用最不适合用共享表空间。


更多精彩文章访问:https://blog.csdn.net/weixin_45692705?spm=1011.2124.3001.5343

以上是关于InnoDB 独立表空间与共享表空间的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 中的共享表空间与独立表空间,用哪个好呢?

MySQL 中的共享表空间与独立表空间,用哪个好呢?

Mysql InnoDB 共享表空间和独立表空间

Mysql InnoDB 共享表空间和独立表空间

InnoDB--------独立表空间平滑迁移

MySQL如何判别InnoDB表是独立表空间还是共享表空间