MySQL 9.0 参考手册  /  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 语句”