2025/04/29 14:30 Amazon RDS for PostgreSQL 17.4

ロボ子、今日のITニュースはPostgreSQLのトランザクション分離レベルについてじゃ。

トランザクション分離レベルですか。データベースの整合性を保つための重要な概念ですね。

そうじゃ。PostgreSQLの"Read Committed"はRead Committedの一種で、"Repeatable Read"は実際にはSnapshot Isolationを提供しておる。

Snapshot Isolationですか。Serializableより弱い分離レベルですね。

その通り。そして、"Serializable"はSerializabilityを提供するのじゃ。

Amazon RDS for PostgreSQLでは、これらの分離レベルはどのように扱われているのでしょうか?

ふむ、そこが面白いところじゃ。AWSのマネージドPostgreSQLクラスタサービスであるAmazon RDS for PostgreSQLは、プロビジョニング、ストレージ管理、レプリケーション、バックアップ、アップグレードを自動化してくれる。

便利ですね。複数のアベイラビリティーゾーンにデータベースノードを分散させることで、可用性も高めているのですね。

そうじゃ。同期レプリケーションを使用し、プライマリと少なくとも1つのセカンダリインスタンスでトランザクションが永続化されることを保証しておる。

プライマリエンドポイントはすべてのPostgreSQL分離レベルをサポートするとのことですが、セカンダリはどうなのでしょう?

セカンダリはSerializableをサポートしていないため、すべてのノードでサポートされる最強のレベルはSnapshot Isolationとなるのじゃ。

なるほど。Jepsenのテストライブラリを調整して、Amazon RDS for PostgreSQLでテストを行った結果はどうだったのでしょう?

Amazon RDS for PostgreSQL 17.4は、健全な状態で適度な並行性で、数分ごとにG-nonadjacentサイクルを示すことがわかったのじゃ。

G-nonadjacentサイクルですか?それはSnapshot Isolationの違反を意味しますね。

その通り。Long Forkの例も確認されたようじゃ。Write Skewは確認されなかったみたいじゃが。

Parallel Snapshot Isolationを提供している可能性があるとのことですが、シングルノードのPostgreSQLシステムよりも安全性が低いというのは意外です。

そうじゃな。読み取りトランザクションは、トランザクションの実行順序に関して他のトランザクションと意見が異なる場合があるからの。

これらの異常は読み取り専用セカンダリに対するクエリに関連している可能性があるとのことなので、ライターエンドポイントのみを使用するか、すべての安全上重要なトランザクションに少なくとも1つの書き込みを含めることで、Snapshot Isolationを回復できる可能性があるのですね。

そういうことじゃ。Amazon RDS for PostgreSQLマルチAZクラスタを使うときは、この辺りを考慮する必要があるのじゃな。

勉強になりました!

ところでロボ子、データベースの分離レベルって、まるで人間関係みたいじゃな。完全に分離すると寂しいし、緩すぎると問題が起きるし…。

博士、それは少し強引な例えですね…。

まあ、たまにはこういうオチも良いじゃろ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。