MySQLのInnoDBファイルフォーマットのAntelopeとBarracudaについて

MySQLのInnoDBのファイルフォーマットのAntelopeとBarracudaについて記載します。

MySQL5.6以前はAntelopeがデフォルトのファイルフォーマットで、5.7以降はBarracudaがデフォルトのファイルフォーマットになります。

ファイルフォーマットのデフォルトがAntelopeからBarracudaになったことで、変わったことを書いていきます。

変わったこと

ファイルフォーマットが変更になったことで、行フォーマットも変更になりました
→これにより、行サイズ制限が変わってきます

ファイルフォーマットが変更になったことで、行フォーマットが変更になりましたので、行フォーマットについて記載します!

スポンサーリンク

行フォーマットについて

AntelopeではCompactがデフォルトの行フォーマットで、BarracudaではDynamicがデフォルトの行フォーマットになります。

  • COMPACT(Antelopeのデフォルト)
    •  BLOB および TEXT のカラムは、先頭768バイトだけレコードに格納され、残りは外部のページに格納される。
  • DYNAMIC(Barracudaのデフォルト)
    • BLOB および TEXT のカラムは、全てオフページに格納でき、ページへのポインタのみレコードに格納される

以外にも以下の2つの行フォーマットがあります。

  • REDUNDANT
  • COMPRESSED

行フォーマットの詳細は公式ページをご参照ください。

https://dev.mysql.com/doc/refman/8.0/ja/innodb-row-format.html

行フォーマットの変更により、行サイズ制限への影響があります!

行サイズ制限への影響

まず、InnoDBには行サイズ制限があり、 1レコードあたり65,535 バイトまで格納可能となっています。

fw_error_www
fw_error_www

行フォーマットが変更になってことにより、1レコードあたり65,535 バイトという制限の計算方法が異なります。

  • COMPACT(Antelopeのデフォルト)
    • BLOB および TEXT のカラムは先頭768バイトがレコードに格納される
      • 行サイズ制限に最大768 バイト影響する(先頭の768バイトなので、768バイトより小さい入力の場合は、768バイトより小さくなる)
        • レコード登録時に、行サイズ制限に引っかかった場合にエラーとなる
  • DYNAMIC(Barracudaのデフォルト)
    • BLOB および TEXT のカラムは、全てオフページに格納でき、ページへのポインタのみレコードに格納される
      • 行サイズ制限に 9 から 12 バイトのみ影響する

ファイルフォーマットと行フォーマットの確認方法

以下のコマンドでファイルフォーマットを確認できます。

SHOW GLOBAL VARIABLES LIKE 'innodb_file_format';

以下のコマンドで行フォーマットを確認可能です。

SHOW TABLE STATUS LIKE 'テーブル名';

まとめ

ファイルフォーマットのデフォルトがAntelopeからBarracudaになったことで、変わったことと、ファイルフォーマットの確認方法を記載しました。

まとめ

ファイルフォーマットが変更になったことで、行フォーマットも変更になりました
→これにより、行サイズ制限が変わってきます

ファイルフォーマットと行フォーマット難しい…!