Chapter 22. PostgreSQL 内部構造の概要

Table of Contents
問合せのパス
接続の確立
パーサステージ
Postgres の rule システム
プランナ/オプティマイザ
エクゼキュータ

著者: 本章は当初 O.Univ.Prof.Dr. Georg Gottlob と Univ.Ass. Mag. Katrin Seyr の指導のもとに、 Stefan Simkovics がウイーン工科大学における博士論文として提出した もの Simkovics, 1998 の一部分でした。

本章では Postgres のバックエンドの内部構造 の概要を説明します。以下の節を読むことで、どのように問合せが処理される のかの概念が理解できると思います。ここでは、詳細な記述を期待し ないでください。 (Postgres における全ての データ構造と機能について記述すると容易に 1000 ページを越えた文書 になってしまいます)。本章は、バックエンドが問合せを受けてから問合せ回答 を返すまでの、一般的な制御とデータの流れに関して読者の理解を深めることを 目的としています。

問合せのパス

ここでは、問合せが問合せ結果を入手するまでの各ステージについて 簡単に概観します。

  1. アプリケーションプログラムと Postgres サーバが接続されている必要が有ります。接続されている状態でアプリ ケーションプログラムは Postgres サーバ に問合せを行い、サーバからの問合せ結果を入手します。

  2. パーサステージ では、アプリケーション プログラム(クライアント)からの問合せに対し、その構文が正しい かどうか解析し 問合せツリー を作成します。

  3. 書き換えシステムはパーサステージ で作成された問合せツリーを取り込み、 (システムカタログ に格納されている) 問合せツリー に適用する rule を探し、 rule の本体で与えられている 変換を実行します。書き換えシステムによるアプリケーションの一つ として view が実現しました。

    view に対しての問合せ(即ち、仮想テーブル)が 作成された時はいつでも、書き換えシステムはユーザの問合せを, その代わりとして、view の定義 で与えられた 基本テーブル にアクセスする問合せに書き換えます。

  4. プランナ/オプティマイザ は(書き換えられた)問合せツリーを取得し、 エグゼキュータへの入力である 問合せプランを作成します。

    この様にして、同じ問合せ結果を導く可能性の有る全ての パスをまず作成します。 例えば、スキャンされるインデックスがリレーション上にあったとすると、 二つのスキャンパスがあります。一つの可能性としては単純な逐次スキャンで、 もう一つはインデックスを利用することです。次に、それぞれのプランを実行 する時の負荷を調べ、より負荷の少ないプランが選択されて戻されます。

  5. エクゼキュータは再帰的に プランツリー のステップを繰り返し、プランで示されたタプルを抽出します。 エクゼキュータはリレーションをスキャン中に 記憶システムを使って、 sort 及び join を実行し、 条件を評価し、最終的に抽出された タプルを戻します。

引き続く節では、Postgres の内部制御と データ構造の理解を深めるため、上記の項目についてより深く考察 します。