17.8. 非アトミックトランザクションとヒューリスティックな結果


アトミック性を保証するために、2 相コミットプロトコルは ブロッキングしています。障害回復のメカニズムが存在していても、障害の結果として、パーティシパントは不定期間ブロックされた状態でいることができます。アプリケーションとパーティシパントの中にはこのブロッキングを許容できないものもあります。
このブロックする性質を打破するためには、prepare フェーズを過ぎたパーティシパントはコミットまたはロールバックするか自発的に決定できます。そうしたパーティシパントが最終的に当初のトランザクションを完了する要求を行う場合にそうできるようにするため、決定を記録する必要があります。コーディネータは最終的にはトランザクションの結果をパーティシパントに通知します。結果がパーティシパントが決定したものと同じであれば、競合は存在しません。パーティシパントとコーディネータの決定が異なる場合は、その状況は非アトミックな結果、さらに具体的に言うと ヒューリスティックな結果 と呼ばれます。
ヒューリスティックな結果の解決およびアプリケーションへの報告は、通常複雑な手動式システム管理ツールが行う領域です。自動解決の試行には、トランザクションに関わるパーティシパントの性質の意味情報が必要なためです。
パーティシパントがヒューリスティックな決定を行う正確な時は固有の実装によります。同様に、パーティシパントがコミットまたはロールバックするかの決定は実装によって決まり、またアプリケーションやパーティシパント自身がある環境による可能性があります。起こりうるヒューリスティックな結果については 表17.2「ヒューリスティックな結果」 で説明します。
Expand
表17.2 ヒューリスティックな結果
結果
詳細
Heuristic Rollback
パーティシパントの一部またはすべてがトランザクションを一方的にロールバックしたため、コミット動作は失敗しました。
Heuristic Commit
すべてのパーティシパントが一方的にコミットしたため試行したロールバック動作は失敗しました。これが発生する可能性がある状況としては、コーディネータがトランザクションの prepare に成功したが、そのトランザクションのログが更新できなかったためトランザクションをロールバックしようと決定する場合です。コーディネータが決定を行う一方で、パーティシパントはコミットするよう決定します。
Heuristic Mixed
一部のパーティシパントはコミットし、他のパーティシパントはロールバックされました。
Heuristic Hazard
一部の更新のディスポジションは既知ではありません。更新が既知の場合は、すべてコミットされるか、すべてロールバックされます。
ヒューリスティックな決定は、例外的な状況でのみ注意して使用されるべきです。トランザクションサービスによる決定とは異なる可能性があるためです。このタイプの違いは、システム内の整合性を失う恐れがあります。ヒューリスティックを発生させないサービスやパーティシパントと連携したり、解決プロセスで役立つトランザクションサービスを使用することにより、ヒューリスティックな解決を行う必要性をなくすようにしてください。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat