[トランザクション開始]特性を「タスク前の前」に設定すると、シングルトランザクションとして全ての更新処理が記録されます。これは、マルチユーザ環境の場合、並行性は減少しますが、パフォーマンスはよくなります。以下のような点を考慮してください。
並行性を改善するには、データビューに数レコードしかない状態でバッチタスクの[タスク前]でトランザクションを開始してください。もちろん、多くのレコードをロックしたい場合もあるので、これはアプリケーションに依存します。(SQLデータベースの使用時で)パフォーマンスを優先させる場合は、バッチタスクでタスクレベルのトランザクションを使用してください。ISAMタイプのデータベースは、バッチの場合拡張されたトランザクションを利用するために、たくさんのディスクストレージを必要とする可能性があります。
注意: |
遅延モードで動作させている場合は、トランザクションを「タスク前の前」で実行するようにはしないでください。これらの処理はキャッシュに保存されますが、キャッシュサイズには限りがあります。 |
インタラクティブなタスクでタスクレベルのトランザクションを使用すると、データソースが長期間トランザクション中にロックされる可能性があるため、マルチユーザ用のプロジェクトで、同じテーブルにアクセスしている他のユーザで問題が発生する場合があります。再度必要となるインスタンスがあるかもしれません。
タスクがトランザクション内で呼ばれた場合、ロックされた行は、そのトランザクションの一部になり、他のユーザからはアクセスできません。
大量のレコードを処理するタスクレベルのトランザクションは、大きなサイズのトランザクションログファイルを作成し、ディスクドライブ上の開き領域を占有することになります。この結果、トランザクションを中止させることになる場合がありますので、ディスクス要領を使い尽くさないように注意してください。
トランザクションがすでにオープンされていたり、タスクレベルのトランザクションの場合、Oracleは入力したタスクのデータビューをロックします(範囲内の全てのレコード)。いくつかの場合、これは意図的な動作です。もし、レコードのいくつかをロックしたい場合、それに応じた範囲の調整が必要です。
この動作は、データの完全性とパフォーマンスに対して有効です。全てのレコードはデータビューの作成でフェッチした場合と同じようにロックされます。他のデータベースでは、データはレコードにパークした時のみロックされます。これは、各レコードに対してデータがロックされるためパフォーマンスに影響します。しかし他方では、並行性は最も高くなります。