MySQLのInnoDBのファイルフォーマットのAntelopeとBarracudaについて記載します。
MySQL5.
ファイルフォーマットのデフォルトがAntelopeからBarracudaになったことで、変わったことを書いていきます。
ファイルフォーマットが変更になったことで、行フォーマットも変更になりました
→これにより、行サイズ制限が変わってきます
ファイルフォーマットが変更になったことで、行フォーマットが変更になりましたので、行フォーマットについて記載します!
行フォーマットについて
AntelopeではCompactがデフォルトの行フォーマットで、BarracudaではDynamicがデフォルトの行フォーマットになります。
- COMPACT(Antelopeのデフォルト)
- BLOB および TEXT のカラムは、先頭768バイトだけレコードに格納され、残りは外部のページに格納される。
- DYNAMIC(Barracudaのデフォルト)
- BLOB および TEXT のカラムは、全てオフページに格納でき、ページへのポインタのみレコードに格納される
以外にも以下の2つの行フォーマットがあります。
- REDUNDANT
- COMPRESSED
行フォーマットの詳細は公式ページをご参照ください。
行フォーマットの変更により、行サイズ制限への影響があります!
行サイズ制限への影響
まず、InnoDBには行サイズ制限があり、 1レコードあたり65,535 バイトまで格納可能となっています。
InnoDB
では内部的に 65,535 バイトを超える行サイズがサポートされますが、MySQL 自体では、すべてのカラムの合計サイズに 65,535 の行サイズ制限が課されます。 セクション8.4.7「テーブルカラム数と行サイズの制限」を参照してください。MySQL :: MySQL 8.0 リファレンスマニュアル :: 15.22 InnoDB の制限
行フォーマットが変更になってことにより、1レコードあたり65,535 バイトという制限の計算方法が異なります。
- COMPACT(Antelopeのデフォルト)
- BLOB および TEXT のカラムは先頭768バイトがレコードに格納される
- 行サイズ制限に最大768 バイト影響する(先頭の768バイトなので、768バイトより小さい入力の場合は、768バイトより小さくなる)
- レコード登録時に、行サイズ制限に引っかかった場合にエラーとなる
- 行サイズ制限に最大768 バイト影響する(先頭の768バイトなので、768バイトより小さい入力の場合は、768バイトより小さくなる)
- BLOB および TEXT のカラムは先頭768バイトがレコードに格納される
- DYNAMIC(Barracudaのデフォルト)
- BLOB および TEXT のカラムは、全てオフページに格納でき、ページへのポインタのみレコードに格納される
- 行サイズ制限に 9 から 12 バイトのみ影響する
- BLOB および TEXT のカラムは、全てオフページに格納でき、ページへのポインタのみレコードに格納される
ファイルフォーマットと行フォーマットの確認方法
以下のコマンドでファイルフォーマットを確認できます。
SHOW GLOBAL VARIABLES LIKE 'innodb_file_format';
以下のコマンドで行フォーマットを確認可能です。
SHOW TABLE STATUS LIKE 'テーブル名';
まとめ
ファイルフォーマットのデフォルトがAntelopeからBarracudaになったことで、変わったことと、ファイルフォーマットの確認方法を記載しました。
ファイルフォーマットが変更になったことで、行フォーマットも変更になりました
→これにより、行サイズ制限が変わってきます
ファイルフォーマットと行フォーマット難しい…!