Innodb共享表空间VS独立表空间 是什么?
Innodb共享表空间VS独立表空间 是什么?
在使用Innodb引擎时将要面对两种表空间的管理选择的问题,Innodb有两种管理表空间的方法: 1. 共享表空间(也可以拆分成多个小的表空间) 2. 独立表空间每一个表有一个独立的表空间。 我个人推荐使用独立表空间。在性能和运维上独立表空间比共享的表空间有很多优势。
下面我将分别说明一下两种表空间管理的特点。 共享表空间: 优点: 可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同步的文件上)。数据和文件放在一起方便管理。 缺点: 所有的数据和索引存放到一个文件中以为着将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。
我们知道共享表空间管理会出现表空间分配后不能回缩的问题,当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。我们存在磁盘监控时,也许就报警不断了,但实际上MySQL还可以运行良好。另外,当磁盘上占用较多时性能也不是太好。
这种情况处理只能是是建一个新的Slave从主库上Dump出来,然后在Dump到从库中,动作较大。 对于InnoDB Hot Backup备份的操作(或是直接冷备),每次需要CP的文件比较大。如果现在有180G的表空间,但实际数据只有50多G,那么我们将面对每次需要拷180G的数据。
这种方式也许mysqldump是一个好的处理方式了。 独立表空间: 在配置文件(my。cnf)中设置: innodb_file_per_table 优点: 1. 每个表都有自已独立的表空间。 2. 每个表的数据和索引都会存在自已的表空间中。
3. 可以实现单表在不同的数据库中移动。 4. 空间可以回收(除drop table操作处,表空不能自已回收)。