数据库管理平台DMP

深信服数据库管理平台(DMP)提供MySQL、Oracle的RDS功能,支持全生命周期管理、自动MySQL主从切换、故障自愈、事务一致性备份、监控告警等,能够实现业务快速上线、资源快速分发、数据安全保护,提供SLA保障,使数据库运维复杂度大幅下降,帮助客户减少被动性救火工作,专注业务创新。
点击可切换产品版本
知道了
不再提醒
DMP 2.3.0
{{sendMatomoQuery("数据库管理平台DMP","使用 InnoDB 表空间改善崩溃恢复时间")}}

使用 InnoDB 表空间改善崩溃恢复时间

更新时间:2023-08-28

MySQL 中的所有表均由表定义、数据和索引组成。MySQL 存储引擎 InnoDB 将表数据和索引存储在表空 间中。InnoDB 创建全局共享的表空间,其中包括数据字典和其他相关元数据,并且它可能包含表数据和索 引。InnoDB 还可以为每张表创建单独的表空间和分区。这些单独的表空间存储在后缀名为 .ibd 的文件中, 并且每个表空间的头部包含一个唯一识别编号。

innodb_file_per_table 提供一个属于 MySQL 参数组的参数,名称为 RDS。这些参数控制 InnoDB 是否(通过将参数值设置为 0)向共享表空间或(通过将参数值设置为 1)向单个表空间添加新的表 数据和索引。RDS innodb_file_per_table 的默认值设置为 1,以便删除单独的 InnoDB 表 并回收用于数据库实例的表所占用的空间。在大多数使用案例中,推荐将 innodb_file_per_table 参数 设置为 1

当表特别多时 (例如,当使用标准 (磁性) 或通用 SSD 存储时,有超过 1000 张表,或当使用预置的 IOPS 存 储时,有超过 10000 张表),应将 innodb_file_per_table 参数设置为 0。当将该参数设置为 0 时,不 会创建独立表空间,这样可以节省数据库崩溃恢复所需的时间。

MySQL 在崩溃恢复循环期间处理每个元数据文件 (包括表空间)。当有多个表空间时,与  MySQL 用于处理 数以千计的表空间文件的时间相比,MySQL 用于处理共享表空间中的元数据信息的时间可以忽略不计。因 为表空间编号存储在每个文件的头部,读取所有表空间文件的总时间可能需要长达数小时。例如,在崩溃恢 复循环期间,标准存储空间上的一百万个 InnoDB 表空间可能需要 5 8 个小时的处理时间。在一些案例 中,InnoDB 可能会在一个崩溃恢复循环后确定它需要额外清理,因此,它会开始另一个崩溃恢复循环,这 会使恢复时间延长。请记住,崩溃恢复循环也会引起回滚事务、修复损坏页面和除表空间信息处理以外的其 他操作。

因为 innodb_file_per_table 参数存储在参数组中,所以可通过编辑数据库实例所使用的参数组来更改 该参数值,无需重新启动该数据库实例。更改该设置后,例如从 1 (创建独立的表) 改为 0 (使用共享的表空 间),新的 InnoDB 表将添加到共享的表空间,而现有的表继续使用独立的表空间。要将 InnoDB 表移动到共 享的表空间,必须使用 ALTER TABLE 命令。