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

简介: InnoDB 独立表空间与共享表空间

独立表空间

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

dbe92ca6a63a45ecb8b944b55696deea.png

共享表空间

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

584bab1b43ac4bcb8a45bfa485a3f577.png

相关命令

查看数据库的表空间

show variables like 'innodb_data%';

0e0f6c25fd7b4de28112d71104033b17.png

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

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

d1832a675fb14b098ba098eff78c83da.png

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

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


  • 或通过命令
set global innodb_file_per_table=1;


独立表空间


ca0c9ad458104212a3bdd4fa3f460c07.png


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


优点


每个表都有自己独立的表空间,每个表的数据和索引都会存储在各个独立的表空间中,可以实现单表在不同的数据进行迁移。

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


缺点


单表增加过大,如超过100G。对于单表增长过大的问题,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围过大同样会访问多个文件,一样会比较慢。

对于独立表空间也有一个解决办法是:使用分区表,也可以把那个大的表空间移动到别的空间上然后做一个连接。其实从性能上出发,当一个表超过100个G有可能响应也是较慢了,对于独立表空间还容易发现问题早做处理。


共享表空间

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


2c2e2c2363674e0da83aa76bd5da2758.png


优点


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


缺点


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


相关文章
|
8月前
|
存储 关系型数据库 MySQL
第9章 【MySQL】InnoDB的表空间
第9章 【MySQL】InnoDB的表空间
47 0
第9章 【MySQL】InnoDB的表空间
|
5月前
|
存储 关系型数据库 MySQL
认真学习InnoDB的数据存储结构中的区、段与表空间
认真学习InnoDB的数据存储结构中的区、段与表空间
56 2
|
12月前
|
关系型数据库 数据库
Innodb表空间迁移
有cfg文件时表空间迁移 在源表上显示建表语句:
|
12月前
|
存储 关系型数据库 MySQL
一文带你了解MySQL之InnoDB表空间
通过前边的内容,相信大家都知道了表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。 大家可以把表空间想象成被切分为许多个页的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。 本章内容会深入到表空间的各个细节中,带领大家在InnoDB存储结构的池子中畅游。由于本章中将会涉及比较多的概念,虽然这些概念都不难,但是却相互依赖,所以奉劝大家看的时候:不要跳着看
169 0
|
12月前
|
存储 关系型数据库 MySQL
一文带你了解MySQL之InnoDB表空间
通过前边的内容,相信大家都知道了表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。 大家可以把表空间想象成被切分为许多个页的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。 本章内容会深入到表空间的各个细节中,带领大家在InnoDB存储结构的池子中畅游。由于本章中将会涉及比较多的概念,虽然这些概念都不难,但是却相互依赖,所以奉劝大家看的时候:不要跳着看
114 0
|
关系型数据库 MySQL
InnoDB系统表空间定义规则
1. InnoDB系统表空间定义规则 2. 并行复制设置不当可能导致主从数据不一致
|
存储 关系型数据库 MySQL
独立表空间&系统表空间总结---innoDB表空间(三十五)
独立表空间&系统表空间总结---innoDB表空间(三十五)
|
存储 关系型数据库 MySQL
整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)
整体结构&InnoDB数据字典(1) --系统表空间结构(三十三)
|
存储 关系型数据库 MySQL
独立表空间结构(2)之段---InnoDB表空间(二十八)
独立表空间结构(2)之段---InnoDB表空间(二十八)
|
存储 关系型数据库 MySQL
独立表空间结构(1)之区---InnoDB表空间(二十七)
独立表空间结构(1)之区---InnoDB表空间(二十七)