web-dev-qa-db-ja.com

InnoDBテーブルのOPTIMIZE TABLEを安全に強制終了できますか?

MySQLのkillに関するドキュメント 警告

警告

MyISAMテーブルでREPAIR TABLEまたはOPTIMIZE TABLE操作を強制終了すると、テーブルが破損して使用できなくなります。このようなテーブルの読み取りまたは書き込みは、再度最適化または修復するまで(中断なしで)失敗します。

それはMyISAMのためです。

InnoDBテーブルに対して実行されているOPTIMIZE TABLEプロセスを強制終了することも危険ですか?

9
KCD

MySQL認定ガイドによると:

OPTIMIZE TABLEステートメントは、MyISAMテーブルを最適化することによってクリーンアップします。これには、削除と更新によって生じた未使用のスペースの再利用、および分割されて不連続に保存されたレコードの結合が含まれます。 OPTIMIZE TABLEはまた、インデックスページが順不同である場合にソートし、インデックス統計を更新します

InnoDBテーブルでも機能しますが、テーブルを再構築するALTER TABLEにマップします。これにより、インデックス統計が更新され、クラスター化インデックスの領域が解放されます。

InnoDBの場合:

InnodbはACIDに準拠しており、最適化テーブルは単にすべてのレコードを新しいテーブルにコピーします

  1. インデックスページが並べ替えられていない場合は、並べ替えます。
  2. テーブルの統計が最新でない場合(そして、インデックスをソートしても修復を実行できなかった場合)、それらを更新します。
  3. テーブルで行が削除または分割されている場合は、テーブルを修復します。

また、実行中にそれを強制終了しようとしても、レコードが失われることはありません。

さらに、innodb_defragment=1を使用するInnoDBの場合、OPTIMIZE TABLEはインクリメンタルなので、ROLLBACKは必要ありません。

8
Abdul Manaf