Day69【概念解析】InnoDB System Tablespace
行业概念

Day69【概念解析】InnoDB System Tablespace

· 约 2,113 字 · 阅读约 11 分钟
目录

整理定义

英文名称:InnoDB System Tablespace

中文名称:InnoDB 系统表空间

相关概念:

  • InnoDB Tablespace,InnoDB System Tablespace是其中的一类

image

image

What is InnoDB System Tablespace?

InnoDB存储引擎使用一个或多个数据文件(即ibdata文件)来存储与InnoDB相关对象的元数据,以及变更缓冲区和双写缓冲区的存储区域。如果表是在系统表空间中创建的,而不是在文件每表或通用表空间中,那么这些文件也可能包含InnoDB表和索引的数据。系统表空间中的数据和元数据适用于MySQL实例中的所有数据库。

在MySQL 5.6.7之前,默认情况下所有InnoDB表和索引都存储在系统表空间内,这经常导致这个文件变得非常大。由于系统表空间永远不会缩小,如果加载了大量的临时数据然后删除,可能会出现存储问题。在MySQL 8.0中,默认模式是文件每表模式,其中每个表及其关联的索引都存储在单独的.ibd文件中。这种默认设置使得使用依赖于DYNAMIC和COMPRESSED行格式的InnoDB特性变得更加容易,例如表压缩、高效存储非页面列和大索引键前缀。

将所有表数据保留在系统表空间或分散在单独的.ibd文件中,对于存储管理有着不同的影响。MySQL Enterprise Backup产品可能会备份一小组大文件,或许多小文件。在有成千上万个表的系统中,处理成千上万个.ibd文件的文件系统操作可能会导致瓶颈。

在MySQL 5.7.6中,InnoDB引入了通用表空间,它们也由.ibd文件表示。通用表空间是使用CREATE TABLESPACE语法创建的共享表空间。它们可以在数据目录之外创建,能够容纳多个表,并支持所有行格式的表。

复述展开

系统表空间在MySQL 5.7和MySQL 8.0版本之间的区别

InnoDB的系统表空间在MySQL 5.7和MySQL 8.0版本之间的主要区别主要体现在默认的表存储方式和对某些特性的支持上。以下是一些关键的差异:

  1. 文件每表模式(File-Per-Table Mode):

  2. 撤销日志(Undo Log)的存储:

  3. 表空间管理:

  4. 行格式(Row Formats):

  5. 性能和可扩展性:

  6. 数据字典:

  7. 表空间加密:

  8. 信息模式和性能模式:

  9. DDL操作:

  10. 分区表:

这些变化反映了MySQL在版本迭代中对InnoDB存储引擎的持续优化和改进,旨在提高性能、可扩展性和易用性。MySQL 8.0的许多新特性和改进都是基于在5.7版本中的经验和用户反馈。

配置项相关

在MySQL中,系统表空间是InnoDB存储引擎的默认表空间,用于存储InnoDB表和索引的数据,除非显式地为这些表指定了其他的表空间。系统表空间的配置和使用方式可以通过以下几个方面来理解:

  1. 配置项:

  2. 使用方式:

  3. 注意事项:

通过合理配置和管理系统表空间,可以确保数据库的性能和可维护性。在实际使用中,推荐开启文件每表模式,这样可以更好地管理磁盘空间,提高数据库的性能。

理解体会

首先,系统表空间的设计决定了它是InnoDB存储引擎的心脏。所有的InnoDB表和索引默认都存储在这里,除非显式地为它们指定了其他的表空间。这种设计简化了初始的数据库部署,但随着数据库的增长,它可能导致系统表空间变得庞大而难以管理。这个认识让我在设计数据库时更加注重表空间的规划,以避免未来可能出现的性能瓶颈。

其次,系统表空间的不可缩减性让我意识到了数据清理和存储优化的重要性。在实际操作中,我学会了定期归档旧数据,以减少对系统表空间的压力。同时,我也开始使用innodb_file_per_table配置,这样每个表的数据都存储在独立的文件中,这不仅有助于管理磁盘空间,还可以提高某些数据库操作的性能。

再者,系统表空间的备份和恢复也是我关注的焦点。由于系统表空间包含了重要的系统信息,任何损坏都可能导致整个数据库实例的不可用。因此,我学会了定期备份系统表空间,并且在备份策略中考虑到了不同的恢复场景。这种做法在我遇到数据丢失的危机时发挥了关键作用,帮助我成功恢复了数据。

最后,我也体会到了监控和调整系统表空间配置的重要性。通过监控系统表空间的使用情况,我可以及时发现潜在的问题,并通过调整配置来解决这些问题。例如,我可以增加数据文件的大小,或者启用自动扩展功能来应对数据增长。这些操作需要谨慎进行,因为它们会影响到数据库的性能和稳定性。

参考

MySQL :: MySQL 8.0 Reference Manual :: 15.6.3.1 The System Tablespace

MySQL :: MySQL 5.7 Reference Manual :: 14.6.3.1 The System Tablespace

MySQL :: MySQL 8.0 Reference Manual :: 15.8.1 InnoDB Startup Configuration

相关文章