`

MySQL独立表空间VS共享表空间

 
阅读更多
在使用Innodb引擎时将要面对两种表空间的管理选择的问题,Innodb有两种管理表空间的方法:

1.  共享表空间(也可以拆分成多个小的表空间)

2.  独立表空间每一个表有一个独立的表空间。

我个人推荐使用独立表空间。在性能和运维上独立表空间比共享的表空间有很多优势。下面我将分别说明一下两种表空间管理的特点。

共享表空间:

优点:

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

缺点:

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

我们知道共享表空间管理会出现表空间分配后不能回缩的问题,当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。我们存在磁盘监控时,也许就报警不断了,但实际上MySQL还可以运行良好。另外,当磁盘上占用较多时性能也不是太好。

这种情况处理只能是是建一个新的Slave从主库上Dump出来,然后在Dump到从库中,动作较大。

对于InnoDB Hot Backup备份的操作(或是直接冷备),每次需要CP的文件比较大。如果现在有180G的表空间,但实际数据只有50多G,那么我们将面对每次需要拷180G的数据。

这种方式也许mysqldump是一个好的处理方式了。

独立表空间:

在配置文件(my.cnf)中设置: innodb_file_per_table

linux版本是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf

win下的是my.ini,一般会在安装目录的根目录

1.innodb_file_per_table设置.开启方法:
在my.cnf中[mysqld]下设置

innodb_file_per_table=1

2.查看是否开启:
mysql> show variables like ‘%per_table%’;


3.关闭独享表空间
innodb_file_per_table=0关闭独立的表空间

mysql> show variables like ‘%per_table%’;


优点:

1.  每个表都有自已独立的表空间。

2.  每个表的数据和索引都会存在自已的表空间中。

3.  可以实现单表在不同的数据库中移动。

4.  空间可以回收(除drop table操作处,表空不能自已回收)

a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。

b) 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。

c) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

缺点:

单表增加过大,如超过100个G。

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

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

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

    mysql InnoDB的存储管理也类似,但是mysql增加了一个共享表空间和独立表空间的概念;  一、概念  共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以...

    浅析mysql 共享表空间与独享表空间以及他们之间的转化

    MySQL数据库存储结构中的表空间是指存储表和索引数据的地方,它有共享表空间和独享表空间两种基本形式,它们各有优缺点,并且支持相互之间的转换。 共享表空间通常指的是多个表的数据和索引存储在同一个文件或一组...

    空间不足之Lvm方案与MySQL自带方案比较

    4. **空间管理**:独立表空间不存在共享表空间的表空间回缩问题,删除操作后可以通过ALTER TABLE等命令回收空间,减少碎片产生。 5. **性能优化**:独立表空间有助于减少碎片化,尤其在单表数据量很大时,易于发现...

    MySQL 清除表空间碎片的实例详解

    - **InnoDB的表空间管理**:InnoDB支持两种表空间模式,即独立表空间(每个表一个.frm文件和一个.ibd文件)和共享表空间(所有表数据存储在一个大文件中)。可以通过`SHOW CREATE TABLE 表名`查看表的存储引擎和表...

    MySQL 5.7临时表空间如何玩才能不掉坑里详解

    MySQL 5.7版本引入了独立的临时表空间特性,为用户在使用MySQL时提供了更多的灵活性。然而,在使用过程中也可能会出现一些问题。接下来的内容将围绕MySQL 5.7的临时表空间的使用进行详细介绍,帮助用户避免使用时...

    关于JDBC与MySQL临时表空间的深入解析

    此外,MySQL 5.7版本对临时表空间进行了改进,将它从共享的`ibdata`文件中分离出来,允许通过`innodb_temp_data_file_path`参数独立管理,这有助于避免因临时表空间过大而引发的问题。`ibtmp1`文件在MySQL启动时创建...

    oracle,sqlserver及mysql对比

    MySQL 的表空间有共享表空间和独占表空间两种。独占表空间实际上是一张表一个表空间,也就是说每张表都有一个独立的数据文件。共享表空间似乎类似于 Oracle 的表空间,不同的表可以保存在同一个数据文件中。但是,...

    innodb存储引擎修改表共享空间为独立空间

    在MySQL中,InnoDB存储引擎提供了两种表空间模式:共享表空间和独立表空间。共享表空间模式下,所有的InnoDB表数据和索引都存储在一个或多个文件中,而独立表空间模式则为每个InnoDB表创建单独的数据文件。 1. **...

    mysql第四章.pdf

    在表空间的管理方面,有两种表空间,分别是共享表空间和独立表空间。共享表空间可以分成多个文件存放在-起方便管理,但当数据量非常大的时候,表做了大量删除操作后表空间中将会有大量的空隙,且共享表空间分配后不...

    mysql Innodb表空间卸载、迁移、装载的使用方法

    MySQL的InnoDB存储引擎在处理表空间方面有两种模式:共享表空间和独立表空间。共享表空间模式下,所有InnoDB表的数据和索引都存储在一个或多个大文件(如ibdata1)中。而独立表空间模式,也称为文件-per-table模式,...

    DU-MySQL-Search-Win-V6.3

    用文件恢复工具通常无法恢复出表文件,或者恢复出的表文件内容为乱码,mysql无法正常识别加载,这时需要用mysql碎片扫描工具扫描残存的表数据,可搜索mysql5/8版本InnoDB表碎片,包括独立表空间和共享表空间,上千...

    Mysql在线回收undo表空间实战记录

    在MySQL 5.6版本之后,引入了一些新的参数和特性,使得Undo表空间可以从共享的`ibdata1`文件中分离出来,以提高数据库性能和管理灵活性。以下是关于Mysql在线回收undo表空间的详细知识点: 1. **相关参数** - `...

    MySql innodb 引擎表存储分析

    而其他一些元数据,如撤销 (undo) 信息和系统事务信息,则仍然存储在共享表空间内。 - 数据段 (Data Segment) 和索引段 (Index Segment) 分别对应B+树的叶节点和非叶节点。 - 表空间由一系列页和段组成,其中每个...

Global site tag (gtag.js) - Google Analytics