質問: mysqlについて質問させてください。 バージョン:mysql5 データ型 :InnoDB カラムを追加する前と後で、 InnoDBの空き容量を比較したのですが、 ほぼ変化がありませんでした。 追加したテーブルは800万レコード程度あります。 SQLは下記のような形です。 alter table hogehoge add col varchar(255) InnoDBの空き領域に関しては、 「show table status」で調べました。 単純にカラム追加で新しく領域を確保して、 InnoDBの空き容量は減ると想定したのですが、 こちらの現象はどういった理由によるものでしょうか。 よろしくお願いします。
回答: InnoDB の場合、DBの実体は、ある一定の初期サイズのファイルになっており、データ容量がこれを超えると自動的に一定の容量だけファイルサイズを拡張していく(エクステント)仕組みになっています。詳しくは「InnoDB 起動オプション」(MySQL公式マニュアル)を参考にしてください。 Comment に表示される "InnoDB free" は、確保されたファイルサイズの残容量を示します。 varchar カラムは可変長であるため、定義時に確保されるのは、データ長を格納する領域(255以下なら1バイト、256以上なら2バイト)だけです。 もし800万レコードの varchar(255) を add したとしても、それによって消費される容量は、8,000,000×1=7.6Mバイト程度に過ぎません。 この程度の増分では、過去にパージされなかったエクステントに吸収されてしまい、free area として表れなかったのではないかと推測します。