0
点赞
收藏
分享

微信扫一扫

MySQL独享表空间和共享表空间

回溯 2022-08-17 阅读 218


介绍

Mysql5.5版本默认配置情况下初始化一个12M的ibdata1文件。我们也可以根据需要设置多个,使用参数innodb_data_file_path来配置。

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)

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

mysql> set global innodb_file_per_table=off;
Query OK, 0 rows affected (0.00 sec)

mysql> create table inclusive(id int);
Query OK, 0 rows affected (0.02 sec)
[root@slave1 slave1]# ll --可以看到没有数据文件,因为将数据写到ibdata1当中了
total 16
-rw-r-----. 1 mysql mysql 65 Mar 27 10:51 db.opt
-rw-r-----. 1 mysql mysql 8556 Mar 30 11:09 inclusive.frm

MySQL独享表空间和共享表空间_表空间

 

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

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| mytest |
| performance_schema |
| slave1 |
| sys |
+--------------------+

MySQL独享表空间和共享表空间_mysql_02

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
mysql> create table share(id int);
[root@slave1 slave1]# cd /var/lib/mysql/slave1
[root@slave1 slave1]# ll
total 112
-rw-r-----. 1 mysql mysql 65 Mar 27 10:51 db.opt
-rw-r-----. 1 mysql mysql 8556 Mar 30 11:05 share.frm
-rw-r-----. 1 mysql mysql 98304 Mar 30 11:05 share.ibd

可以看到share.frm是定义的表结构的文件,share.ibd是表的索引文件和数据文件。

 

innoDB和MyISAM数据文件对比

innoDB(共享表空间,独享表空间)      

frm   结构文件      

ibd    数据文件(独享表空间)      

ibdata1 数据文件 (共享表空间)

 

MyISAM      

frm   结构文件      

myd   数据文件      

myi    索引文件

 

总结

独立表空间的优点:
1.每个表都有自已独立的表空间。
2.每个表的数据和索引都会存在自已的表空间中。
3.可以实现单表在不同的数据库中移动。
4.空间可以回收(drop/truncate table方式操作表空间不能自动回收)
5.对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

缺点:
单表增加比共享空间方式更大。

共享表空间的优点:
1)可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同的文件上)。
所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,
也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
2)表数据和表描述放在一起方便管理。 
缺点:
所有的数据和索引存放到一个文件中,将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间。

MySQL数据库是由N多表组成的,每个表有自己的表定义文件.frm文件,表索引文件,表数据文件。INNODB的索引文件和数据文件是在一起的,MYISAM是分开的。
对于表空间,INNODB分成共享表空间和独享表空间2种。共享的情况下,所有表的数据都存在一个文件里,独享情况下,每个表单独文件存储此表的数据。

举报

相关推荐

0 条评论