myisamchkを起動させるとき、メモリの割り当ては重要です。myisamchkはセットされたメモリ関連の変数以上のメモリを使用しません。myisamchkを大きなテーブルで使用する場合、まずどのくらいのメモリを使用するか決定しなければいけません。デフォルトで、修復には3MBくらいしか使用しないように設定されています。さらに大きな値を設定することで、myisamchkのオペレーション速度を上げることができます。例えば、32MB RAMよりも多くメモリがある場合、以下のオプション(他に特定したオプションのほかに)を使用することができます。
shell>myisamchk --sort_buffer_size=16M --key_buffer_size=16M \
--read_buffer_size=1M --write_buffer_size=1M ...
--sort_buffer_size=16M
を使用すれば、ほとんどの場合ことたります。
myisamchkはTMPDIR
内でテンポラリファイルを使用することに注意してください。もしTMPDIR
がメモリファイルシステムを指した場合、メモリエラーから簡単に脱出できます。これが起こった場合、スペースに余裕のあるファイルシステム上のディレクトリを指定するよう、myisamchkを--tmpdir=
オプションと使用してください。
path
修復時、myisamchkもディスクスペースを大量に必要とします。
データファイルの大きさを2倍にしてください(オリジナルファイルと複製を作成してください)。--quick
で修復を行った場合スペースは必要ありません。この場合、再作成されるのはインデックスファイルのみです。このスペースはオリジナルのデータファイルと同じシステムで必要になります!(コピーはオリジナルと同じディレクトリで作成されます。)
古いインデックスファイルの代わりとなる新しいインデックスファイルのスペース修復オペレーションの始めに古いインデックスファイルは切り捨てられるため、大抵はこのスペースは無視されます。このスペースはオリジナルのインデックスファイルと同じシステムで必要になります!
--recover
あるいは--sort-recover
を使用しているとき、
(しかし--safe-recover
は使用していないとき)ソートバッファのスペースが必要となります。以下の式は必要なスペースの量を生み出します。
(largest_key
+row_pointer_length
) ×number_of_rows
× 2
キーの長さとrow_pointer_length
をmyisamchk
-dv
tbl_name
でチェックすることができます。このスペースはテンポラリディレクトリにアロケートされています。(TMPDIR
か--tmpdir=
によって特定されています)。
path
修復中、ディスクスペースが足りなくなった場合、--recover
の代わりに--safe-recover
を使用してみてください。