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


9

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

警告

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

MyISAMについてです。

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

回答:


8

MySQL認定ガイドによると:

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

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

InnoDBの場合:

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.