MySQL 8.3 Release Notes
除了在数据字典中存储数据库对象的元数据外,MySQL 还将其存储在序列化形式中。该数据被称为序列化字典信息 (SDI)。InnoDB
将 SDI 数据存储在其表空间文件中。NDBCLUSTER
将 SDI 数据存储在 NDB 字典中。其他存储引擎将 SDI 数据存储在 .sdi
文件中,该文件是在表的数据库目录中创建的。SDI 数据以紧凑的 JSON
格式生成。
序列化字典信息 (SDI) 存在于所有 InnoDB
表空间文件中,除了临时表空间和撤销表空间文件。SDI 记录在 InnoDB
表空间文件中仅描述表空间中的表和表空间对象。
SDI 数据由 DDL 操作在表或 CHECK TABLE FOR UPGRADE
更新。SDI 数据不会在 MySQL 服务器升级到新版本时更新。
SDI 数据的存在提供了元数据冗余。例如,如果数据字典不可用,对象元数据可以直接从 InnoDB
表空间文件中使用 ibd2sdi 工具提取。
对于 InnoDB
,一个 SDI 记录需要一个索引页,默认大小为 16KB。然而,SDI 数据被压缩以减少存储 footprint。
对于分区的 InnoDB
表,由多个表空间组成,SDI 数据存储在第一个分区的表空间文件中。
MySQL 服务器使用内部 API,在 DDL 操作期间访问以创建和维护 SDI 记录。
IMPORT TABLE
语句基于 .sdi
文件中的信息导入 MyISAM
表。有关更多信息,请参阅 第 15.2.6 节,“IMPORT TABLE 语句”。