横断的に理解する PostgreSQL の 内部データ構造: MVCC・トランザクション分離・インデックス
ARANK
はじめにこんにちは。かろっく@calloc134 です。巷では NewSQL が流行りを見せていますが、皆さんこう思ったことはありませんか?我々は、RDBMS ですら、十分に理解していないのではないか?今回は、PostgreSQL の内部実装に焦点を当てて、RDBMS 実装の解像度を上げていきたいと思います。PostgreSQL の内部実装については、インデックスの実装、追記型アーキテクチャ、MVCC、トランザクション分離モデルなどが断片的に語られることはありますが、横断的な解説はあまり見かけないように思います。この記事では、PostgreSQL におけるMVCC を用いた読み取り整合性の実装トランザクション分離モデルインデックスの実装について、横断的に解説していきます。今回割愛したものブログ執筆にあたり、以下の内容は割愛しました。トランザクションのステータス管理の実装ctid の詳細な解説t_infomask ビットの詳細な解説と効率化の実装書き込みにおける並行制御の実装 (行レベルロックなど)複数トランザクションにまたがる複雑な可視性チェックアルゴリズムインデックスの詳細な実装 (b-link tree の詳細な実装)HOT (Heap-only tuple) 最適化の解説ご了承ください。PostgreSQL の全体…
2 comments
なるほど。インデックスとデータが(ヒープ)が分離されてるのって、postgresが特別だとは思わないんだよな。MySQLとは違うけど、Oracleもポインタ(rowid)を持つ構造だし、そちらが普通だと思ってた。
zenn.dev/calloc134/arti…
postgresでインデックス関連が特殊?なのは、インデックスだけではタプルの可視性が確認できない所かなと思う(vacuumされてない場合)。