理解innodb的表空间管理

本文详细介绍了InnoDB的File-Per-Table模式的优势,如快速truncate和drop操作、独立表空间的自定义存储、表空间复制等。同时也讨论了潜在的缺点,如额外的fsync操作和打开文件数限制。重点讲述了Transportable Tablespaces特性,包括其应用场景、限制和导入导出流程。此外,还涉及了InnoDBUndo Logs的独立存储以及如何调整InnoDB的日志文件大小和表空间容量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Advantages of File-Per-Table Mode

1 当truncate或者drop一个表时可以释放磁盘空间。如果不是独立表空间,truncate或drop一个表只是在ibdata文件内部释放,实际ibdata文件并不会缩小,释放出来的空间也只能让其他innodb引擎的表使用(有时这会造成磁盘空间容量监控的一个痛点,无法判断它到底有多满)

2 独立表空间下,truncate table操作会更快

3 独立表空间下,可以自定义表的存储位置,通过CREATE TABLE ... DATA DIRECTORY = absolute_path_to_directory命令实现(有时将部分热表放在不同的磁盘可有效地提升IO性能)

4 独立表空间下,可以回收表空间碎片(比如一个非常大的delete操作之后释放的空间),alter table xxx engine=innodb

5 可以移动单独的innodb表,而不是整个database

6 可以copy单独的innodb表从一个实例到另外一个实例(也就是transportable tablespace特色)

7 独立表空间模式下,可以使用Barracuda的文件格式,这个文件格式有压缩和动态行模式的特色。这个当表中有blob或者text字段的话,动态行模式(dynamic row format)可以发挥出更高效的存储。

8 独立表空间模式下,可以更好的改善故障恢复,比如更加节约时间或者增加崩溃后正常恢复的机率。

9 单独备份和恢复某张表的话会更快

10 可以使得从一个备份中单独分离出表,比如一个lvm的快照备份

11 可以在不访问mysql的情况下方便地得知一个表的大小,即在文件系统的角度上查看。

12 在大部分的linux文件系统中,如果innodb_flush_method为O_DIRECT,通常是不允许针对同一个文件做并发写操作的。这时如果为独立表空间模式的话,应该会有较大的性能提升。

13 如果没有独立表空间模式,那么所有的东西都在共享表空间,而共享表空间是有64T的容量上限的(这点比较扯淡)

Potential Disadvantages of File-Per-Table Mode

1 独立表空间模式下,每个表或许会有很多没用到的磁盘空间,因为初始表空间大小是固定的吧,有些表根本没使用都这么多。如果没做好管理,可能会造成较大的空间浪费。

2 fsync操作必须运行在每一个单一的文件上,独立表空间模式下,多个表的写操作就无法合并为一个单一的IO,这样就添加许多额外的fsync操作

3 mysqld必须

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值