バッチタスクの処理が途中で飛ばされる?
お世話になります。
クラサバアプリの実行中に、バッチタスクにおいて、エラーとかでなく正常に実行されているにも関わらず、処理が途中で飛ばされて次のタスクに進んでしまうように見える現象が時々あります。
例えば
バッチタスクA→バッチタスクB→バッチタスクC・・・
と処理が続くときに、バッチタスクAの処理が完了していないにも関わらず、Bにいくような事象です。例えば、Aで、10件のレコードを登録するような処理をした際に、8件くらいまでしか登録されていないのに、Bに進むような事象です。
説明がおおざっぱですいませんが、このような事象に遭遇された方はいらっしゃいますか。
-
tagamiさん、
バッチタスクは並列に並んでいるのでしょうか、それとも階層的に繋がっているのでしょうか?
-
ご返信ありがとうございます。
並列に並んでいる
-
状況です。
途中送信になり、失礼しました
-
tagamiさん、
トランザクションの設定を調べてみてはいかがでしょうか?
バッチタスクが親タスクのトランザクションの配下に入っていると、親のタスクが終了するまでバッチ更新の内容はコミットされませんので、並列上にある別タスクからトランザクション中のデータを除き見ても、途中のデータしか見えないはずです。
バッチタスクのトランザクションを親タスクから切り離してもよいのであれば、トランザクションをネストにして、サブタスクごとにコミットにしてやればいいですよ。
-
tanda様
お忙しいところご返信ありがとうございます。
まずは、トランザクションのあたりを確認してみようと思います。
-
データベースは何を使用されていますか。
-
投稿いただき、ありがとうございます。
データベースは、SQL Serverを使っています。
-
Pervasiveのトランザクションを使っていた時に
ページロックでtagamiさんが言われている様な現象で苦しめられた事がありましたので確認させていただきました。
-
こんにちはPuです
自分が遭遇した時は「イベント=yes」になっていたと言う初歩的なミスでした(^^)/
でわ~でわ~ -
コメントありがとうございます。
似たような事例の方がいらして、ホッとしました。
そこも見てみます
-
タスク特性のイベント割り込みがYesだとこういう現象が起きると思います。
-
みなさま、ありがとうございます。
トランザクションおよびタスク特性の「イベント可」をNoにして、しばらく様子をみてみます。
大変助かりました。
-
tagamiさん、
バッチが並列に並んでいるということでしたら、それぞれのバッチが途中で干渉して割り込むということはないはずですよ。最初に確認させていただいた通りですよ。
-
> バッチタスクのトランザクションを親タスクから切り離してもよいのであれば、トランザクションをネスト
> にして、サブタスクごとにコミットにしてやればいいですよ。この方法をぜひ試してみてください。
サインインしてコメントを残してください。
コメント
14件のコメント