pg_profileは、 PolarDB for PostgreSQL (Oracle互換) でサポートされているサードパーティの拡張機能です。 この拡張機能を使用して、データベース内のリソースを大量に消費するアクティビティに関する統計を収集し、データベースを分析および最適化できます。 この拡張は、PostgreSQLの統計ビューと一部のコミュニティ拡張に基づいています。 この拡張機能はPL/pgSQLで記述されており、外部ライブラリやソフトウェアは必要ありません。 pg_profileとpg_cronを一緒に使用して、リソースを大量に消費するアクティビティを定期的に収集および監視できます。
前提条件
この機能は、次のエンジンを実行するPolarDB for PostgreSQL(Compatible with Oracle) クラスターでサポートされています。
PolarDB for PostgreSQL (Oracle互換) 2.0 (バージョン2.0.14.18.0以降)
次のステートメントを実行して、PolarDB for PostgreSQL(Compatible with Oracle) クラスターのリビジョンバージョンを表示できます。
SHOW polar_version;注意事項
データを収集するには、
pg_stat_文およびpg_stat_kcache拡張が必要です。 これらの拡張機能が既定で読み込まれるように、データを収集するデータベースのshared_preload_librariesパラメーターにこれらの拡張機能が追加されていることを確認します。説明shared_preload_librariesの設定方法の詳細については、「」「クラスターパラメーターの設定」をご参照ください。 このパラメーターを変更すると、クラスターが再起動します。 作業は慎重に行ってください。pg_stat_statements拡張子は、データを収集するデータベースに作成されます。 必要に応じて、データベースにpg_stat_kcache拡張機能を作成して、詳細情報を収集できます。収集された情報の保存はディスク領域を占有します。 pg_profile拡張機能は、自動データクリーンアップメカニズムを提供します。 データが適切に保存されていることを確認してください。
pg_profile拡張機能が統計を収集するには長い時間が必要です。 収集頻度を1時間に1回または2回に設定することを推奨します。
使用法
dblink拡張機能を使用する場合は、セキュリティ上、プロファイルデータベースとサーバーデータベースを同じ PolarDB for PostgreSQL (Compatible with Oracle) クラスターに作成する必要があります。
次の例では、サーバーデータベースとプロファイルデータベースを作成します。
サンプリング中、プロファイルデータベースは、サーバデータベースにサンプリング要求を送信する。 要求を受信した後、サーバデータベースは、統計結果をプロファイルデータベースに返し、データをテーブルに格納する。 これにより、プロファイルデータベースから他のデータベースの統計を取得できます。
サーバーデータベース
サーバーデータベースを作成します。
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=<The privileged account of the server database> password=<The password of the account>'
);次の表に、ステートメントのパラメーターを示します。
パラメーター | 値の例 | 説明 |
サーバー | サーバー | ユーザー定義の接続名。 |
dbname | サーバー | データベース名。 |
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=<The privileged account of the profile database> password=<The password of the account>'
);次の表に、ステートメントのパラメーターを示します。
パラメーター | 値の例 | 説明 |
サーバー | サーバー | 接続 の名前です。 名前を変更する必要はありません。 |
dbname | サーバー | データベース名。 |
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 | サーバー | ストレステストを実行するデータベースの名前。 |
-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 | | |結果に基づくレポートの生成
次のいずれかの方法を使用して結果をエクスポートできます。
方法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 <The endpoint of the cluster in which the profile database is created> \ -p <The port of the cluster> \ -U <The privileged account of the cluster in which the profile database is created>