9.4.4. ヒューリスティックな結果

ヒューリスティックな結果あるいは原子的でない結果とは、トランザクションに異常があることで、トランザクションの参加者の一部はステートをコミットし、その他の参加者はロールバックした場合を言います。ヒューリスティックな結果が発生すると、ステートの一貫性が保たれなくなります。
通常、ヒューリスティックな結果は、2 相コミット (2PC) プロトコルの 2 番目のフェーズで発生します。基盤のハードウェアや基盤サーバーの通信サブシステムの障害が原因となる場合が多くあります。
ヒューリスティックな結果には 4 種類あります。
ヒューリスティックロールバック
参加者の一部あるいはすべてが一方的にトランザクションをロールバックしたため、コミット操作に失敗します。
ヒューリスティックコミット
参加者のすべてが一方的にコミットしたため、ロールバック操作に失敗します。例えば、コーディネーターが正常にトランザクションを準備したにも関わらず、ログ更新の失敗などコーディネーター側で障害が発生したためロールバックの実行を決定した場合などに発生します。暫定的に参加者がコミットの実行を決定する場合があります。
ヒューリスティック混合
一部の参加者がコミットし、その他の参加者はロールバックした状態です。
ヒューリスティックハザード
更新の一部の結果が不明な状態です。既知の更新結果はすべてコミットまたはロールバックします。
ヒューリスティックな結果が起こると、システムの整合性が保たれなくなり、通常、解決に人的介入が必要になります。ヒューリスティックな結果に依存するようなコードは記述しないようにしてください。