myisamchk を実行する際、メモリー割り当ては重要です。myisamchk はメモリー関係の変数の設定を超えてメモリーを使用することはありません。 myisamchk を非常に大きなテーブルで使用する場合、まずどのくらいのメモリーを使用するか決定する必要があります。 デフォルトでは、修復に 3M バイト程度しか使用しないように設定されています。 より大きな値を使用することで、myisamchk の動作速度を上げることができます。 たとえば、512M バイトを超える RAM が使用可能な場合は、(ほかに指定するオプションに加えて) 次のようなオプションを使用できます。
shell> myisamchk --myisam_sort_buffer_size=256M \
--key_buffer_size=512M \
--read_buffer_size=64M \
--write_buffer_size=64M ...
おそらくほとんどの場合には --myisam_sort_buffer_size=16M
を使用すれば十分です。
myisamchk は TMPDIR
内の一時ファイルを使用することに注意してください。 TMPDIR
がメモリーファイルシステムを指している場合、メモリー不足エラーが容易におきる可能性があります。 これが発生した場合は、--tmpdir=
オプションを指定して myisamchk を実行し、より多くの領域を持つファイルシステム上にあるディレクトリを指定します。
dir_name
修復操作を実行する場合、myisamchk はディスクスペースも大量に必要とします。
データファイルのサイズの 2 倍 (元のファイルとコピー)。
--quick
で修復を行う場合、スペースは必要ありません。この場合、再作成されるのはインデックスファイルのみです。 コピーはオリジナルと同じディレクトリ内に作成されるため、このスペースはオリジナルのデータファイルと同じファイルシステム上で使用可能でなければなりません。古いインデックスファイルを置換する新しいもの用のスペース。 古いインデックスファイルは修復操作の最初に切り捨てられるため、通常このスペースは無視します。 このスペースは、オリジナルのデータファイルと同じファイルシステム上で使用可能でなければなりません。
-
--recover
または--sort-recover
を使用する場合 (ただし--safe-recover
を使用する場合を除く)、ソートのためのスペースがディスク上に必要です。 この領域は、(TMPDIR
または--tmpdir=
で指定された) 一時ディレクトリに割り当てられます。 次の式は必要なスペースの量を求めます。dir_name
(largest_key + row_pointer_length) * number_of_rows * 2
キー長および
row_pointer_length
は myisamchk -dvtbl_name
で確認できます (セクション4.6.4.5「myisamchk によるテーブル情報の取得」を参照してください)。row_pointer_length
値およびnumber_of_rows
値は、テーブル情報内のDatafile pointer
値およびData records
値です。largest_key
値を判断するには、テーブル情報内のKey
行を確認します。Len
カラムは各キーパートのバイト数を示します。 マルチカラムインデックスでは、キーサイズはすべてのキーパートのLen
値の合計です。
修復中にディスクスペースの問題がある場合は、--recover
の代わりに --safe-recover
を使用してみてください。