
美河学习在线 www.eimhe.com 收集分享
MYSQL 扩展空间部分 Innodb 共享表空间与独立表空间的选择
1.针对共享表空间最有以下特点
1.不受文件系统限制 神马意思呢? 就说当我的文件增大到一定程度的时候可以将 ibdata 文件后续分拆到
其他的磁盘分区
2.会将所有的索引和数据存放在一个文件 或者说 ibdata*文件中 会导致单个文件很大 当然也可以做成多
个小的 ibdata 文件
3.多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,
特别是对于统计分析,日值系统这类应用最不适合用共享表空间
4.最后我们知道共享表空间管理会出现表空间分配后不能回缩的问题,当出现临时建索引或是创建一个临
时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了。我们存在磁盘监控时,也许就
报警不断了,但实际上 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 操作处,表空不能自已回收)
a) Drop table 操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table
TableName engine=innodb;回缩不用的空间。
b) 对于使 innodb-plugin 的 Innodb 使用 turncate table 也会使空间收缩。
c) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
缺点:
单表增加过大,如超过 100 个 G。
对于单表增长过大的问题,如果使用共享表空间可以把文件分开,但有同样有一个问题,如果访问的范围
过大同样会访问多个文件,一样会比较慢。对于独立表空间也有一个解决办法是:使用分区表,也可以把
那个大的表空间移动到别的空间上然后做一个连接。其实从性能上出发,当一个表超过 100 个 G 有可能响
应也是较慢了,对于独立表空间还容易发现问题早做处理。
备份:
InnoDB Hot Backup(冷备)的表空间 cp 不会面对很多无用的 copy 了。而且利用 innodb hot backup 及表空间
的管理命令可以实现单现移动。
监控:
可以更好从系统上监控数据的大小,每个表的大小。
另外推荐使用独立表空间的原因:
从性能上对比共享表空间和独立表空间:
共享表空间在 Insert 操作上少有优势。其它都没独立表空间表现好。这里也有一个 TIPS 当启用独立表空间
时,请合理调整一下:innodb_open_files 。
评论