web-dev-qa-db-ja.com

実行時間の長い変更クエリを強制終了するとどうなりますか?

実行時間の長い変更クエリを強制終了するとどうなりますか?変更クエリは単に元に戻りますか?それにはどれくらい時間がかかりますか(すでに実行されている時間の割合として)?

そのクエリが別のサーバーに複製されている場合はどうなりますか?他のサーバーでプロセスを強制終了すると、元のサーバーの変更クエリが元に戻りますか?

Mysqlを実行しています

28
B T

それはあなたがしていることに依存します。 InnoDBテーブルでan alter table...add indexコマンドを実行している場合(MyISAMについてはよくわかりません)、darnテーブルのロックストック全体をコピーするときに実行されます。 -and-barrel first:「copyto temp table」の途中にある場合、それはほとんど止められません。

ここを参照:

ほとんどの場合、ALTER TABLEは、元のテーブルの一時的なコピーを作成することによって機能します。コピーに対して変更が実行された後、元のテーブルが削除され、新しいテーブルの名前が変更されます。 ALTER TABLEの実行中、元のテーブルは他のセッションで読み取ることができます。テーブルへの更新と書き込みは、新しいテーブルの準備ができるまで停止され、その後、更新が失敗することなく、新しいテーブルに自動的にリダイレクトされます。

17
davek

そのクエリが別のサーバーに複製されている場合はどうなりますか?

ALTERはそのサーバーでも実行され、関連する影響があります。

他のサーバーでプロセスを強制終了すると、元のサーバーの変更クエリが元に戻りますか?

いいえ。元のサーバーには、スレーブで何が発生したか(または発生しなかったか)を知るためのバックチャネルがありません。スレーブでALTERを強制終了すると、マスターに新しい制約またはインデックスがあり、スレーブにはない状況になります。これが幸せのレシピになることはめったにありません:)

ALTERがレプリケーションログに入ると、どこでも実行できるようにするか、どこでも強制終了する必要があります。

0
dland