MySQL 8.0 リファレンスマニュアル


4.6.4.6 myisamchk メモリー使用量

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 を使用すれば十分です。

myisamchkTMPDIR 内の一時ファイルを使用することに注意してください。 TMPDIR がメモリーファイルシステムを指している場合、メモリー不足エラーが容易におきる可能性があります。 これが発生した場合は、--tmpdir=dir_name オプションを指定して myisamchk を実行し、より多くの領域を持つファイルシステム上にあるディレクトリを指定します。

修復操作を実行する場合、myisamchk はディスクスペースも大量に必要とします。

  • データファイルのサイズの 2 倍 (元のファイルとコピー)。 --quick で修復を行う場合、スペースは必要ありません。この場合、再作成されるのはインデックスファイルのみです。 コピーはオリジナルと同じディレクトリ内に作成されるため、このスペースはオリジナルのデータファイルと同じファイルシステム上で使用可能でなければなりません

  • 古いインデックスファイルを置換する新しいもの用のスペース。 古いインデックスファイルは修復操作の最初に切り捨てられるため、通常このスペースは無視します。 このスペースは、オリジナルのデータファイルと同じファイルシステム上で使用可能でなければなりません。

  • --recover または --sort-recover を使用する場合 (ただし --safe-recover を使用する場合を除く)、ソートのためのスペースがディスク上に必要です。 この領域は、(TMPDIR または --tmpdir=dir_name で指定された) 一時ディレクトリに割り当てられます。 次の式は必要なスペースの量を求めます。

    (largest_key + row_pointer_length) * number_of_rows * 2

    キー長および row_pointer_lengthmyisamchk -dv tbl_name で確認できます (セクション4.6.4.5「myisamchk によるテーブル情報の取得」を参照してください)。 row_pointer_length 値および number_of_rows 値は、テーブル情報内の Datafile pointer 値および Data records 値です。 largest_key 値を判断するには、テーブル情報内の Key 行を確認します。 Len カラムは各キーパートのバイト数を示します。 マルチカラムインデックスでは、キーサイズはすべてのキーパートの Len 値の合計です。

修復中にディスクスペースの問題がある場合は、--recover の代わりに --safe-recover を使用してみてください。


関連キーワード:  myisamchk, プログラム, サーバー, テーブル, スペース, メモリー, 情報, 表示, 接続, 修復