8

場合によっては、複数のバックエンドプロセスが同時に実行されると(キュー管理は別のものであり、そのように解決できますが、これはここでは問題ではありません)、次のようになります。General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK

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

すでに実行中のプロセスよりもクエリを優先するにはどうすればよいですか?

それが十分に明確であったことを願っています。

4

1 に答える 1

12

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

最適なオプションは、LOW PRIORITY チャンク操作を使用することです。基本的には、低優先度のクエリの実行に時間がかかりすぎる場合は、データベースに孤立したデータや不正なデータを作成することなく、クエリを分割して高速化する方法を考えてください。

非常に基本的な使用例は、10,000 行を挿入する挿入を想像することです。挿入を「チャンク」して、より小さなデータ セット (つまり、一度に 500) で挿入を複数回実行することにより、それぞれがより迅速に完了するため、低優先度以外の操作をよりタイムリーに実行できるようになります。 .

方法

低い優先度を設定するのは、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"

于 2012-09-03T21:22:01.097 に答える