2012-09-03 14 views
7

、いくつかのバックエンドプロセスを同時に実行するために起こる(キュー管理が何か他のもので、私はそのようにそれを解決することができますが、これはここで問題ありません)、 私はGeneral error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK特定のクエリを優先する方法は?特定の場面で

を取得重要度の低いプロセスは、優先度の高いものより数分前に開始されたため、テーブルをロックするプロセスです。

すでに実行中のプロセスに対してクエリを優先させるにはどうすればよいですか?

希望があれば十分です。

答えて

12

クエリが実行を開始すると、一時停止/中断することはできません。これに対する唯一の例外は、クエリを強制的に停止させることができるDB管理レベルです(実行中のプロセスをWindowsで強制終了すると考える)。しかし、あなたはそれをしたくないので、それを忘れてください。

あなたの最善の選択肢は、LOW PRIORITYチャンク処理を使用することです。基本的には、LOW PRIORITYのクエリが実行に時間がかかり過ぎると、孤立したデータや不正なデータをデータベースに作成することなく、高速に分割できる方法を考えてください。

非常に基本的な使用例は、10,000個の新しい行を挿入する挿入物を想像するでしょう。より小さなデータセット(すなわち、一度に500)で複数回インサートを実行するようにインサートを「チャンク」することにより、各インサートはより迅速に完了し、したがって、非LOW優先動作をよりタイムリーに実行することができる。以下のような低優先度がLOW_PRIORITYフラグに追加するだけで何かを設定する

どのようにするには

INSERT LOW_PRIORITY INTO xxx(a,b,c,) VALUES()

UPDATE LOW_PRIORITY xxx SET a=b

DELETE LOW_PRIORITY FROM xxx WHERE a="value"

+0

OK ...どのように私は、 –

+1

が追加(uは答えにこれを追加することができますか?)クエリの低い優先順位をマークあなたもする必要があります忘れてはいけないでしょうこれを機能させるために操作をより小さなビットにチャンク化します。クエリが開始されると、他の操作を実行するために終了する必要があります。 LOW PRIORITYは、LOW PRIORITYクエリが終了し次のLOW PRIORITY(すなわち、チャンククエリの第2のもの)が実行される直前に、他のノーマル/ハイプライオリティクエリを単に実行することを単に許可する。 – Lee

+1

@Lee私が追加する唯一のものは、 'low_priority_updates'オプションに関する情報です。http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_low_priority_updates –

関連する問題