Azureリレーショナル応用

ある決済企業がAzure SQL Databaseで取引トランザクションを管理しており、ACID特性を厳密に保証する必要があります。ただし、「決済完了直後の数秒間は読み取り遅延が生じても構わない」という非機能要件が追加されました。トランザクション性能を維持しながら読み取りの同時実行性を向上させるために、どの分離レベルを採用すべきですか?

A.READ UNCOMMITTEDを使用し、コミット前のダーティデータも読み取り可能にする
✗ READ UNCOMMITTEDはダーティリードを許容するため、決済システムのACI特性要件に違反します。
B.READ COMMITTEDを継続し、ロック方式の最適化のみを実施する
✗ READ COMMITTEDではブロッキングが発生する可能性があり、同時実行性の向上は限定的です。
C.SNAPSHOT分離レベルを設定し、トランザクション開始時点のスナップショットから読み取る← 正解
✓ 正解です。SNAPSHOT分離レベルは行バージョニングを使用し、読み書き競合を減らしながらACID特性を保証できます。
D.SERIALIZABLE分離レベルに強化し、競合を排除する
✗ SERIALIZABLEはロック競合を増加させ、むしろ性能を低下させます。

この問題のポイント

SNAPSHOT分離レベルは行バージョニングを使用し、読み書き競合を減らしながらACID特性を保証できます。

DP-900:Microsoft Azure Data Fundamentals の問題一覧