すべてのプロダクト
Search
ドキュメントセンター

PolarDB:pg_profile (リソース監視)

最終更新日:Dec 18, 2025

pg_profile は、PolarDB for PostgreSQL および でサポートされているサードパーティ製の拡張機能です。ターゲットデータベース内でリソースを大量に消費するアクティビティに関する統計情報を収集し、データベースの分析と最適化を支援します。この拡張機能は、PostgreSQL の統計ビューといくつかのコミュニティ拡張機能に基づいています。完全に PL/pgSQL で記述されており、外部ライブラリやソフトウェアは必要ありません。pg_cron 拡張機能と併用することで、定期的にデータを収集し、リソースを大量に消費するアクティビティを監視できます。

適用範囲

以下のバージョンの PolarDB for PostgreSQL がサポートされています。

  • PostgreSQL 16 (マイナーエンジンバージョン 2.0.16.9.9.0 以降)

  • PostgreSQL 15 (マイナーエンジンバージョン 2.0.15.14.6.0 以降)

  • PostgreSQL 14 (マイナーエンジンバージョン 2.0.14.10.18.0 以降)

説明

マイナーエンジンバージョンは、コンソールで表示するか、SHOW polardb_version; 文を実行して確認できます。ご利用のクラスターがマイナーエンジンバージョンの要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードしてください。

注意事項

  • データ収集には pg_stat_statements および pg_stat_kcache 拡張機能が必要です。これらがサンプリング対象データベースの shared_preload_libraries パラメーターに追加されていることを確認してください。これらはデフォルトでロードされます。

    説明

    shared_preload_libraries パラメーターの変更方法の詳細については、クラスターパラメーターの設定をご参照ください。このパラメーターを変更するとクラスターが再起動します。続行する前に、ビジネス運用を慎重に計画してください。

  • サンプリング対象データベースでは、pg_stat_statements 拡張機能を作成する必要があります。より多くの情報を収集するために、pg_stat_kcache 拡張機能を作成することもできます。

  • サンプル情報を格納するとディスク領域を消費します。この拡張機能には自動クリーンアップメカニズムがありますが、データ保持期間はユーザー自身で管理する必要があります。

  • 1 回のサンプリング操作には時間がかかります。そのため、サンプリングを頻繁に実行しないでください。推奨される頻度は 1 時間に 1〜2 回です。

使用方法

説明

dblink のセキュリティ制限により、プロファイルデータベースとサーバーデータベースは、同じ PolarDB for PostgreSQL または クラスター内に作成する必要があります。

次の手順では、サーバーデータベースとプロファイルデータベースの作成方法について説明します。

サンプリング中、プロファイルデータベースはサーバーデータベースにサンプリングリクエストを送信します。サーバーデータベースはリクエストを受信した後、その統計情報をプロファイルデータベースに返します。統計情報はテーブルに格納されます。これにより、プロファイルデータベースから他のデータベースの統計情報を取得できます。

サーバーデータベース

サーバーデータベースを作成します:

CREATE DATABASE server;

サーバーデータベースに接続し、統計拡張機能を作成します:

\c server
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS pg_stat_kcache;

プロファイルデータベース

プロファイルデータベースを作成します:

CREATE DATABASE profile;

プロファイルデータベースに接続し、拡張機能を作成します:

\c profile
CREATE EXTENSION IF NOT EXISTS pg_profile CASCADE;

サンプリング接続の作成

SELECT create_server(
   'server',
   'dbname=server channel_name=localhost user=<privileged_account_of_the_server_database> password=<password_for_the_account>'
);

次の表にパラメーターを示します。

パラメーター

説明

server

server

接続名。ユーザー定義です。

dbname

server

データベース名。

channel_name

localhost

接続情報。`localhost` のみがサポートされています。

user

test_user

サーバーデータベースが存在するクラスターの特権アカウント。

password

T123456!

アカウントのパスワード。

次の例に出力を示します:

                                    show_servers
-------------------------------------------------------------------------------------
 (server,"dbname=server channel_name=localhost user=test_user password=****",t,)
(1 row)

サンプリング接続情報の変更

SELECT set_server_connstr(
   'server',
   'dbname=server channel_name=localhost user=<privileged_account_of_the_profile_database> password=<password_for_the_account>'
);

次の表にパラメーターを示します。

パラメーター

説明

server

server

接続名。変更しないでください。

dbname

server

データベース名。

channel_name

localhost

接続情報。`localhost` に固定されています。

user

test_user

サーバーデータベースが存在するクラスターの特権アカウント。

password

T123456!

アカウントのパスワード。

初期データ収集の実行

SELECT take_sample();

次の例に出力を示します:

      take_sample
-------------------------
 (server,OK,00:00:02.81)
(1 row)

サンプリング対象データベースのストレステスト後の再データ収集

pgbench ツールを使用して、サンプリング対象のサーバーデータベースでストレステストを実行します:

pgbench -s 100 -i server -U test_user -h pc-****.pg.rds.aliyuncs.com -p 5432

次の表にパラメーターを示します。

パラメーター

説明

-s

100

`100` は、`pgbench_accounts` テーブルに 10,000,000 行が作成されることを示します。

-i

server

テスト対象のデータベース。

-U

test_user

サーバーデータベースが存在するクラスターの特権アカウント。

-h

pc-****.pg.rds.aliyuncs.com

サーバーデータベースが存在するクラスターのエンドポイント。

-p

5432

クラスターのポート。コンソールに表示されるポート番号を指定します。

プロファイルデータベースに接続し、再度データを収集します:

SELECT take_sample();

収集したデータを表示します:

SELECT * FROM show_samples('server');

次の例に出力を示します:

sample |      sample_time       | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
--------+------------------------+-----------------+---------------+-----------------+-----------------
      1 | 2024-02-23 07:29:53+00 | t               |               |                 |
      2 | 2024-02-23 08:11:39+00 | t               |               |                 |

収集結果からレポートを生成する

次の 2 つのいずれかの方法を使用して、収集したデータをローカルファイルにエクスポートできます。

  • 方法 1: psql クライアントツールの対話型コマンドラインで次の SQL 文を実行して、出力ファイルを生成します。

    \o report_1_2.html
    SELECT get_report('server',1,2);
  • 方法 2: コマンドラインを使用して psql にデータを直接ファイルに書き込むように指示します。

    psql -Aqtc "SELECT get_report('server',1,2)" \
       -o report_server_1_2.html -d profile \
       -h <endpoint_of_the_profile_database_cluster> \
       -p <port_of_the_database_cluster> \
       -U <privileged_account_for_the_profile_database_cluster>