MySQL 8.4 参考手册  /  MySQL 数据字典  /  序列化字典信息 (SDI)

16.6 序列化字典信息 (SDI)

除了在数据字典中存储有关数据库对象的信息外,MySQL 还以序列化形式存储这些信息。这些数据称为序列化字典信息 (SDI)。InnoDB 将 SDI 数据存储在其表空间文件中。 NDBCLUSTER 将 SDI 数据存储在 NDB 字典中。其他存储引擎将 SDI 数据存储在每个表的数据库目录下创建的 .sdi 文件中。SDI 数据以紧凑的 JSON 格式生成。

序列化字典信息 (SDI) 出现在所有 InnoDB 表空间文件中,除了临时表空间文件和撤消表空间文件。InnoDB 表空间文件中的 SDI 记录仅描述表空间中包含的表和表空间对象。

SDI 数据通过对表或 CHECK TABLE FOR UPGRADE 的 DDL 操作更新。在 MySQL 服务器升级到新版本或新版本时,SDI 数据不会更新。

SDI 数据的存在提供了元数据冗余。例如,如果数据字典不可用,可以使用 ibd2sdi 工具直接从 InnoDB 表空间文件中提取对象元数据。

对于 InnoDB,SDI 记录需要一个索引页,默认大小为 16KB。但是,SDI 数据经过压缩以减小存储空间占用。

对于由多个表空间组成的分区 InnoDB 表,SDI 数据存储在第一个分区的表空间文件中。

MySQL 服务器使用内部 API,在 DDL 操作期间访问该 API 来创建和维护 SDI 记录。

IMPORT TABLE 语句根据 .sdi 文件中包含的信息导入 MyISAM 表。有关更多信息,请参阅 第 15.2.6 节,“IMPORT TABLE 语句”