Amazon RDS または Aurora PostgreSQL DB インスタンスの実行中のクエリを確認し、リソース消費の問題を診断する方法を教えてください。

最終更新日: 2021 年 6 月 7 日

Amazon Relational Database Service (Amazon RDS) または Amazon Aurora PostgreSQL DB インスタンスでアクティブに実行されているクエリを確認する必要があります。どうすればよいですか?

解決方法

実行中のクエリを確認する

RDS for PostgreSQL または Aurora PostgreSQL の DB インスタンスで実行されているすべてのプロセスを表示するには、ユーザーアカウントに rds_superuser ロールが付与されている必要があります。それ以外の場合、pg_stat_activity は、独自のプロセスで実行されているクエリのみを表示します。詳細については、The Statistics Collector に関する PostgreSQL のドキュメントを参照してください。

1.    PostgreSQL または Aurora PostgreSQL を実行している DB インスタンスに接続します

2.    次のコマンドを実行します。

SELECT * FROM pg_stat_activity ORDER BY pid;

このコマンドを変更して、接続の確立時に順序付けられた実行中のクエリリストを表示することもできます。

SELECT * FROM pg_stat_activity ORDER BY backend_start;

列の値が null の場合、そのセッションで開いているトランザクションはありません。

SELECT * FROM pg_stat_activity ORDER BY xact_start;

または、最後のクエリが実行されたときに順番通りに実行されているクエリの同じリストを表示します。

SELECT * FROM pg_stat_activity ORDER BY query_start;

待機イベントの集計ビューがある場合は、次のコマンドを実行します。

select state, wait_event, wait_event_type, count(*) from pg_stat_activity group by 1,2,3 order by wait_event;

リソース消費を診断する

pg_stat_activity を使用して拡張モニタリングを有効にすると、大量のシステムリソースを消費しているクエリやプロセスを特定できます。拡張モニタリングを有効にした後、問題の診断に必要な情報を表示できる詳細度セットが十分であることを確認します。次に、pg_stat_activity をチェックして、データベース内の現在のアクティビティと、その時点での拡張モニタリングメトリクスを確認できます。

1.    OS プロセスリストのメトリクスを表示して、リソースを消費しているクエリを特定します。次の例では、プロセスは RDS DB インスタンスの CPU 時間の約 95% を消費しています。このプロセスのプロセス ID (pid) は 14431 で、プロセスは SELECT ステートメントを実行しています。MEM% を確認することで、システムメモリの使用状況を確認することもできます。

名前 VIRT RES CPU% MEM% VMLIMIT
postgres: master postgres 27.0.3.145(52003) SELECT [14431] 457.66 MB 27.7 MB 95.15 2.78 無制限

2.    PostgreSQL または Aurora PostgreSQL を実行している DB インスタンスに接続します

3.    次のコマンドを実行して、セッションの現在のアクティビティを特定します。

SELECT * FROM pg_stat_activity WHERE pid = PID;

注: PID は、ステップ 1 で特定した pid に置き換えます。

4.    コマンドの結果を確認します。

datid            | 14008
datname          | postgres
pid              | 14431
usesysid         | 16394
usename          | master
application_name | psql
client_addr      | 27.0.3.145
client_hostname  |
client_port      | 52003
backend_start    | 2020-03-11 23:08:55.786031+00
xact_start       | 2020-03-11 23:12:16.960942+00
query_start      | 2020-03-11 23:12:16.960942+00
state_change     | 2020-03-11 23:12:16.960945+00
wait_event_type  |
wait_event       |
state            | active
backend_xid      |
backend_xmin     | 812
query            | SELECT COUNT(*) FROM columns c1, columns c2, columns c3, columns c4, columns c5;
backend_type     | client backend

クエリを実行しているプロセスを停止するには、別のセッションから次のクエリを呼び出します。PID は、ステップ 3 で特定したプロセスの PID に置き換えます。

SELECT pg_terminate_backend(PID);

重要: トランザクションを終了する前に、各トランザクションがデータベースとアプリケーションの状態に与える潜在的な影響を評価します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?