データベースオブジェクトに関するメタデータをデータディクショナリに格納する以外に、MySQL ではシリアライズされた形式で格納します。 このデータは、シリアライズディクショナリ情報 (SDI) と呼ばれます。 InnoDB
では、SDI データはテーブルスペースファイル内に格納されます。 NDBCLUSTER
は、SDI データを NDB ディクショナリに格納します。 その他のストレージエンジンは、テーブルデータベースディレクトリ内の特定のテーブルに対して作成された SDI データを .sdi
ファイルに格納します。 SDI データは、コンパクトな JSON
形式で生成されます。
シリアライズディクショナリ情報 (SDI) は、一時テーブルスペースおよび undo テーブルスペースファイルを除くすべての InnoDB
テーブルスペースファイルに存在します。 InnoDB
テーブルスペースファイルの SDI レコードには、テーブルスペース内に含まれるテーブルおよびテーブルスペースオブジェクトのみが記述されます。
SDI データは、テーブルまたは CHECK TABLE FOR UPGRADE
に対する DDL 操作によって更新されます。 SDI データは、MySQL サーバーを新しいリリースまたはバージョンにアップグレードしても更新されません。
SDI データが存在すると、メタデータの冗長性が提供されます。 たとえば、データディクショナリが使用できなくなった場合、ibd2sdi ツールを使用して、オブジェクトメタデータを InnoDB
テーブルスペースファイルから直接抽出できます。
InnoDB
の場合、SDI レコードには単一のインデックスページ (デフォルトでは 16KB) が必要です。 ただし、SDI データは、ストレージフットプリントを削減するために圧縮されます。
複数のテーブルスペースで構成されるパーティション化された InnoDB
テーブルの場合、SDI データは最初のパーティションのテーブルスペースファイルに格納されます。
MySQL サーバーは、DDL 操作中にアクセスされる内部 API を使用して SDI レコードを作成および保守します。
IMPORT TABLE
ステートメントは、.sdi
ファイルに含まれる情報に基づいて MyISAM
テーブルをインポートします。 詳細は、セクション13.2.5「IMPORT TABLE ステートメント」を参照してください。