InnoDBデータファイルのサイズを変更するには
InnoDBデータファイルの世界は深い。
とりわけ、データファイルの構成を指定するパラメータ、Innodb_data_file_path。
こいつは深い。深すぎる。いい加減に設定すると後で泣きを見そうである。
ということで、殆ど参考サイトからの受け売りではあるが、頭を整理するためにまとめてみた。
以下は最低限の基本パターン。サイズは10MB以上でなければいけない。
innodb_data_file_path = ibdata1:10M
以下、複数のデータファイルを定義。規模の大きなデータベースに対応できそうである。
innodb_data_file_path = ibdata1:2000M;ibdata2:2000M;ibdata3:2000M
以下、自動拡張を有効にする指定。
2つ目の「ibdata2」は10MBから8MBずつ、OSの最大容量まで拡大できる。
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
ちなみにインクリメントのデフォルトサイズは8MBだが、この値も別のパラメータ
innodb_autoextend_incrementにより変更可能。
拡大の最大値を指定するパターン。自動拡張の値を指定できるのは、パラメータ値最後の
データファイルのみであることに注意。
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend:1024M
InnoDBはこのように複数のデータファイルを構成することで巨大なテーブルの構築も可能となる。
しかし、当初必要なデータサイズの見当がつかない場合もある。後からファイルを追加したり、
サイズを変更したくなったらどうしたらよいか。
データファイルは後から追加可能。自動拡張していない場合は、値の最後に追加するだけ。
では、自動拡張を有効にしている場合は?
ここから結構やっかいだったりする。
そもそも、「InnoDB にはファイルシステムの最大サイズが分からない」らしいしね・・・
(オフィシャルサイトより)
以下、参考サイトからそのまま抜粋。
最後が自動拡張(autoextend)の場合には,自動拡張(autoextend)指定となっているデータファイルの容量を初期値+8MB倍数で近い値に指定すれば容量固定のデータファイルとして運用でき,その後に新たなデータファイルを追加できる。
これを読んでもしばらく「???」だったが、オフィシャルサイトの説明を合わせて
読んだらどうにか分かってきた。
例えば「10M:autoextend」に指定しているibdata1が、988MBまで成長したとする。
※つまり上で言うところの「データファイルの容量を初期値+8MB倍数で近い値」が988MBと仮定する。
この基準は、最後のデータファイルがどのサイズまで成長するかを考慮する必要があるため、
だと思われる。
その場合ibdata1を988MBの固定サイズに変更し、ibdata2を自動拡張として追加すればよい。
つまり以下のようになる。
innodb_data_file_path = ibdata1:10M:autoextend
↓ ↓ ↓
innodb_data_file_path = ibdata1:988M;ibdata2:50M:autoextend
autoextendに指定しているデータファイルはこのような形で変更可能なようだが、
固定値で設定した場合は。
確か初期状態で指定した値の分だけディスク領域が確保される仕様だったし、
サイズ変更は不可、だろう。ちなみに運用開始後のデータファイル削除も不可、だそうである。
どうしても、という時はサイズを小さくためにInnoDBテーブルスペースの再構築が必要になる。
オフィシャルサイトに手順がのっているが、あまりこういうことはやりたくない。
やはりある程度慎重にプランニングする必要がありそうだ。
参考URL
13.5.7. InnoDB データとログ ファイルの追加と削除
[MySQLウォッチ]InnoDBのファイルに関する設定
InnoDBのファイルサイズ管理