私は休止状態とトランザクションを初めて使います。休止トランザクション(1行をinprogとして読み込み、他のテーブルに書き込む)(他のテーブルを読み込み、notinprogに行を設定)
テーブル内に進行中の状態としてマークする行があります。私は2番目のテーブルを持っています。これは、進行中のワーカーが受け取った行をラップアップする直前に受け取る行を記述するためのものです。
は、これら2つのテーブルを使用している2つのトランザクションがある:
1)トランザクションが最大シーケンス番号列の進行中のダミー行をフェッチします。この行を見るとき、その行がコミットされたことを知る必要があります。 (最小の分離は何ですか?)次に、行の進行中フラグが真であるかどうかを確認します。進行中の場合、進行中の行をすでにコミットしている別の長期実行スレッド(単一のトランザクションではない)があり、新しいデータを補助テーブルに追加して、実行中のスレッドは、補助テーブルから行を取得/削除/処理し、それらを使用して何かを行い、最終的には、単一のアトミックなトランザクションでinprogressをfalseに設定します。
2)2番目のスレッドが起動し、開始時に進行中がtrueにコミットされていることがわかります。別々のトランザクションでいくつかの作業を行います。 (1)スレッド1のいくつかが書いた補助データを第2のテーブルに読み込み、(2)それらを除去して処理し、(3)インスレッドの進行中の列を書き込み、進捗行をfalseにします。
最初の質問は、これらの2つの関連トランザクションの場合、スレッド2が終了するとスレッド1が2番目のテーブルBに追加したすべての補足データを処理したということで、それは進行中の状態を見たとき。
また、スレッド2で進行中の状態をfalseに設定するために休止状態のセッターを使用する場合、補助データを取り出し、削除して処理する前にそれを実行する必要があることに非常に懸念しています。そして、トランザクションで最初にやってみると、孤立を引き起こすために休止状態になるためにセッションをフラッシュする必要がありますか?
おかげで、 アンディ