PostgreSQL アーキテクチャの概要

完了

PostgreSQL は、クライアント/サーバー型のリレーショナル データベース管理システム (RDMS) です。 PostgreSQL は、Azure Cosmos DB for PostgreSQL オプションの Citus 拡張機能など、さまざまな拡張機能をサポートしています。 拡張機能がデータベースに読み込まれた後は、他の組み込み関数と同じように機能します。

PostgreSQL には、pgsql と呼ばれる独自のクエリ言語もあります。 さらに、PostgreSQL は Ruby on Rails のような手続き型言語もサポートしています。

PostgreSQL の拡張機能と言語を示すスクリーンショット。

クライアント/サーバー アーキテクチャ

PostgreSQL はクライアント/サーバー アーキテクチャに基づいています。 サーバーは、データを格納し、管理し、クライアント プログラムにデータを返します。 クライアント プログラムは、pgSQL、または PL/pgSQL のような PostgreSQL がサポートする手続き言語のいずれかを使ってデータを要求します。

PostgreSQL セッションは 3 つの部分で構成されています。

  • ポストマスター
  • クライアント アプリケーション
  • サーバー

ポストマスター

ポストマスターは PostgreSQL サーバーを管理するデーモン プロセスです。 ポストマスター デーモンは、サーバーの初期化、サーバーのシャットダウン、接続要求の処理、その他のバックグラウンド処理の実行を含め、さまざまなサーバー プロセス間の通信を管理します。 Azure Database for PostgreSQL 内のファイル システムにも、ポストマスター プロセスにもアクセスすることはできません。

クライアント アプリケーション

クライアントは、Azure Database for PostgreSQL サーバー上のデータベースに対してクエリを実行し、対話します。 クエリを実行するには、Azure Data Studio、DBeaver、pgAdmin、psql などのクライアント ツールが必要です。 クライアント ツールについては、次のモジュールで学習します。

サーバー プロセス

クラスター - 1 つの PostgreSQL サーバーで複数のユーザー データベースをホストできます。 PostgreSQL はこのデータベースのコレクションを "クラスター" と呼びます。 各データベースは互いに独立しており、ユーザーとアプリケーションは 1 つのデータベースを操作します。 ユーザーはクラスターまたはサーバーのレベルで作成されます。

これらのデータベースのデータは、PGDATA というクラスターのデータ ディレクトリに格納されます。 PGDATA データ ディレクトリには、実行中の PostgreSQL バージョンを含むファイル、テーブルスペースへのリンクを含む pg_tblspc、先書きログ ファイルを含む pg_xlog が含まれています。

Note

Azure Databases for PostgreSQL は、ストレージとその基礎のファイル システムを管理するサービスです。 このサーバーのユーザーは、PGDATA ディレクトリやそのサブディレクトリに直接アクセスすることができません。

ユーザーが作成するデータベースに加えて、3 つのシステム データベースがあります。

  • postgres - 既定のデータベースです。 ユーザーは、サーバーを作成したら、postgres データベースに接続します。
  • azure_maintenance - サービス プロセスを管理するデータベースです。 ユーザーはこのデータベースに直接アクセスできません。
  • azure_sys - クエリ ストア データベースです。 azure_sys データベースまたはそのスキーマは変更しないでください。 azure_sys の何かを変更すると、クエリ ストアや他のパフォーマンス機能が正しく機能しなくなります。

スキーマ - スキーマとは、データベース オブジェクトの名前付きグループです。 オブジェクト数が多い大規模なデータベースでは、オブジェクトをスキーマに整理することが有効です。 たとえば、販売関連オブジェクトのスキーマと顧客関連オブジェクトのスキーマを作成すると、正しいオブジェクトを簡単に見つけることができます。

サーバー パラメーター - PostgreSQL にはいくつかの構成ファイルがあります。これらによって、データベース エンジンの動作方法が決まります。 PostgreSQL の主な構成ファイルは postgresql.conf という名前です。

Azure Database for PostgreSQL は、これらの構成ファイルをサーバー パラメーターに置き換えています。これにアクセスするには、Azure portal または Azure CLI を使います。

Azure portal でサーバー パラメーターを表示または修正するには:

  1. お使いの Azure Database for PostgreSQL サーバーに移動します。
  2. 左側のメニューにある [設定] の下の [サーバー パラメーター] を選びます。
  3. 検索バーを使ってパラメーターの一覧をフィルター処理するか、必要なページ番号を選びます。

ストレージ - Azure Database for PostgreSQL は、ユーザーに代わってデータ ストレージを管理します。これはサーバー レベルでプロビジョニングされます。 Burstable、General Purpose、または Memory Optimized のいずれのコンピューティング レベルを選んでも、32 GB から 16 TB のストレージを使用できます。 より多くのストレージをプロビジョニングするには、Azure Database for PostgreSQL サーバーに移動し、[概要] セクションから [構成] を選びます。 [コンピューティングとストレージ] セクションが表示されます。 [ストレージ] の下の [ストレージ サイズ (GB)] で、スライダーを使って、プロビジョニングするストレージの量を選びます。

プロビジョニングするストレージの量は、Azure Database for PostgreSQL サーバーで使用できる I/O 容量を定義するものです。 ご自身の I/O 使用量を監視するには、Azure Portal または Azure CLI コマンドを使用します。 監視すべき関連メトリックは、容量の上限、ストレージの割合、ストレージの使用量、および IO の割合です。

Note

Azure Database for PostgreSQL サーバーを作成した後に、ストレージの量を増やすことはできますが、減らすことはできません。

テーブルスペース - PostgreSQL のオンプレミス実装の場合、pg_tblspc サブディレクトリを使って PGDATA というメイン ストレージ領域にリンクされたテーブルスペースを作成できます。 Azure Database for PostgreSQL はテーブルスペースをサポートしません。すべてのテーブルはメイン ストレージ領域に作成されます。

システム カタログ - PostgreSQL には、データベース オブジェクトに関する情報を格納するシステム テーブルとビューが多数あります。 たとえば、pg_database はサーバー上のすべてのデータベースを返し、pg_class はテーブルに関する統計情報を格納します。

Note

Azure Database for PostgreSQL では、一部のシステム カタログにアクセスできますが、すべてのシステム カタログにアクセスできるわけではありません。

拡張機能 - PostgreSQL は、データベース エンジンのコア機能を拡張するさまざまな拡張機能をサポートしています。 これらの拡張機能は PostgreSQL Extensions Network (PGXN) というリポジトリ上で使用できます。

PostgreSQL 拡張機能を使うには、データベースにインストールする必要があります。 拡張機能をインストールするには、psql ツールから CREATE EXTENSION コマンドを実行して、データベースに拡張機能を読み込みます。 次に例を示します。

SELECT create_extension('postgis');

Azure Database for PostgreSQL でサポートされている拡張機能を確認するには、次のクエリを実行します。

SELECT * FROM pg_available_extensions;

すべての Azure Database for PostgreSQL サーバーには、pg_stat_statements 拡張機能が含まれています。 この拡張機能があらかじめインストールされているのは、SQL ステートメントの実行統計情報を追跡する機能を提供するためです。 サーバー パラメーター pg_stat_statements.track を使うと、この拡張機能によってカウントされるステートメントを定義できます。 オプションは次のとおりです。

  • Top - クライアントから直接発行されたすべてのステートメントを追跡します (既定値)。
  • None - どのステートメントも追跡しません。
  • All - 入れ子になったステートメント、関数から呼び出されたステートメントを含むすべてのステートメントを追跡します。

Note

各 SQL ステートメントを記録するために、サーバー上でパフォーマンスのオーバーヘッドが発生します。 pg_stat_statements を積極的に使わない場合は、このパラメーターを none に設定してください。 また、pg_stat_statements に依存するサードパーティの監視サービスが存在する可能性があるので注意してください。

クエリ オプティマイザー - PostgreSQL はコストベースのクエリ最適化手法を使います。 このパーサーはクエリ構文を確認し、クエリを複数の部分に分割します。 パーサーは解析ツリーを作成し、クエリをリライターに渡します。そこで、クエリに規則が適用されます。 プランナーは、クエリが実行される前に、クエリを実行するための最適な方法を見つけ出します。

バックエンド プロセス - PostgreSQL プロセスのトランザクション単位のモデルです。 新しいユーザーが接続すると、PostgreSQL はユーザーを認証し、接続を処理するバックエンド サーバー プロセスを作成します。 クライアントは、クエリを送信するときと、クエリ結果を受け取るときにのみ、サーバー プロセスと対話します。