2012-01-04 10 views
0

行ロックと長時間実行されるクエリから発生するパフォーマンス上の問題のため、クエリをストアドプロシージャとして実行することを選択しました。 cronジョブを5分ごとに実行します。あまりにも長く実行されるcronのジョブベッドMySqlクエリにロールバックを発行する方法

私の問題は、クエリが5分以上の時間がかかり、ストアドプロシージャの次のスケジュールされた実行と衝突する状況を防ぐ必要があることです。トランザクションでこのクエリを実行するので、理想的には、5分後にストアドプロシージャのどこかでロールバックを実行するだけです。これは可能ですか?

ありがとうございました。

答えて

1

'ブルートフォース'方式は、 'jobs'という表を持つことです。各行には開始時刻と終了時刻があります。終了時刻がない最新の開始時刻を探します。あなたの次の仕事が始まりたいと思って、終わりの時間がリストされていないなら、前の仕事を殺す。

プロセスIDを入力することもできます。

0

私は、プロシージャの開始時にエポックタイムに気づいただけです。その後、各レコードを処理した後、コミットして経過時間を計算します。あらかじめ設定されたタイムアウト値を超えている場合は、I BREAKを実行して手順を終了してください。

唯一の可能性のある失敗は、ストアドプロシージャのwhileループのロジック(挿入)が長すぎる場合ですが、これは起こりそうにありません。私はこの可能性を軽減するためにいくつかの出口ハンドラを宣言しました(彼らはROLLBACKを行います)。

関連する問題