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 独立表空间与共享表空间的主要内容,如果未能解决你的问题,请参考以下文章