InnoDBデータファイルのサイズ
提供:MySQL Practice Wiki
目次 |
概要
InnoDBのデータファイルは、autoextendオプション(デフォルト)を利用することでデータファイルの自動拡張が行われるが、たとえ行の削除、テーブルDROPやTRUNCATEなどをしても、データファイルが小さくなることはない。もしファイルシステムにInnoDB以外のデータを置いてしまっていたとしたら、データファイルが大きくなりすぎることは問題である。
対策
データファイルが大きくなりすぎることを防ぐには、以下のいずれかの対策を講じると良い。
データファイルの最大サイズを指定する
対策の一つは自動拡張する場合に、その上限値を設定することである。それにはinnodb_data_file_pathオプションを明示的に指定する必要がある。例えば以下のようにである。
innodb_data_file_path=ibdata1:10M:autoextend:max:250G
これならば250GB以上にデータファイルが成長することはない。(その代わり、データファイルが満杯になったらtable is fullエラーが出力されることであろう。)
テーブルごとのテーブルスペースを利用する
毎度おなじみの--innodb-file-per-tableを利用する。このオプションを利用するとテーブルごとに.ibdファイルが作成される。.ibdファイルは共有テーブルスペース(ibdata1など)とは違い、テーブルがDROPされるとファイル自体が削除される。そのため、間違ってテーブルのサイズが大きく鳴りすぎても、後から削除することでファイルシステムに空きスペースを作成することが可能なのである。
ただし、このオプションを利用した場合、各.bdファイルの最大サイズを指定することはできない。もし誤って大量の更新をしてしまった場合などには、ファイルシステムの空き領域を使い果たしてしまう可能性があるので注意すること。
autoextendしない
autoextendしなければデータファイルが大きくなりすぎるというような問題は生じない。しっかりサイジングが出来ていて、データの最大サイズがどの程度なのかが予め分かっていれば、自動拡張させないのが最良の方法である。その場合、設定は以下のようになる。
innodb_data_file_path=ibdata1:500G
バックアップ方法などの運用ポリシー次第ではあるが、自動拡張させないのであればRAWデバイスを利用してもいいだろう。