PostgreSQLの内部アーキテクチャは、他の多くのデータベースシステムとは異なる方法でデータの更新を処理します。これらの更新を最適化するための中心的なメカニズムがHeap Only Tuple(HOT)パスです。このプロセスは、特に更新内容がインデックス化された列の値を変更しない場合に、レコードの更新に関連するオーバーヘッドを最小限に抑えることでパフォーマンスを向上させるように設計されています。PostgreSQLがこれらの内部的な移動をどのように管理しているかを理解することで、開発者は高負荷の書き込み操作下でデータベースがどのように動作するかをより正確に予測できるようになります。
HOT更新メカニズムは特定の条件下で機能します。具体的には、更新された列がいずれのインデックスにも含まれておらず、かつデータの新しいバージョン(タプル)が古いバージョンと同じ物理ページ内に収まる場合にのみトリガーされます。これらの条件が満たされると、PostgreSQLは関連するすべてのインデックスを更新することなくレコードを更新でき、I/Oを大幅に削減できます。しかし、この最適化は「fillfactor」の設定に敏感です。テーブルのページが詰まりすぎていると、新しいタプルのためのスペースがなくなり、HOT更新は失敗して、完全なインデックスメンテナンスを必要とする標準的な更新を強制されます。Hacker Newsのコメントでは、更新の多いテーブルにおいてfillfactorを下げる(例えば80〜90にする)ことで、HOT更新が発生するために各ページに十分な空きスペースを確保できることが指摘されています。
HOTパス以外にも、データベースの動作はzHeapの実装やTOAST(The Oversized-Attribute Storage Technique)の処理によってさらに定義されます。これらのコンポーネントは、PostgreSQLがデータの保存と取得に関して何を行い、何を行わないかについてのメンタルモデルを提供します。さらに、同時実行中のトランザクション中に一貫性を保証するデータベースのスナップショット隔離(SSI)の実装は、技術的な精査の対象となってきました。例えば、2020年のJepsenレポートでは、SSIの実装における長年のバグが特定され、分散または同時実行操作において厳密な一貫性を維持することの複雑さが浮き彫りになりました。これらの内部構造は日常的な使用では抽象化されていることが多いものの、PostgreSQLにおけるストレージ効率と更新パフォーマンスの間の根本的なトレードオフを象徴しています。
