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