跳至內容

如何檢查 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 資料庫執行個體上正在執行的查詢,並診斷資源耗用問題?

2 分的閱讀內容
0

我想查看 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 資料庫執行個體上正在執行的查詢。或者,查看 Amazon Aurora PostgreSQL 相容版本資料庫執行個體上正在執行的查詢。

解決方法

檢查執行中查詢

您的使用者帳戶必須具備 rds_superuser 角色,才能查看 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 相容版的資料庫執行個體上執行中的所有程序。否則,pg_stat_activity 只會顯示其自身程序正在執行的查詢。如需更多資訊,請參閱 PostgreSQL 文件中的統計資料收集器

1.    連線到執行 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 的資料庫執行個體

2.    執行以下命令:

SELECT * FROM pg_stat_activity ORDER BY pid;

您也可以修改此命令,以檢視執行中查詢的清單。查詢會依連線建立的時間排序:

SELECT * FROM pg_stat_activity ORDER BY backend_start;

如果 xact_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_activityEnhanced Monitoring 來識別耗用大量系統資源的查詢或程序。在您開啟 Enhanced Monitoring 之後,請將精細度設定為足以查看診斷問題所需資訊的層級。然後,檢閱 pg_stat_activity,以查看資料庫中目前的活動。您也可以檢閱該時間點的 Enhanced Monitoring 指標。

1.    檢視作業系統程序清單指標,以識別耗用資源的查詢。在以下範例中,此程序耗用 RDS 資料庫執行個體約 95% 的 CPU 時間。此程序的程序 ID (pid) 是 14431。此程序正在執行 SELECT 陳述式。您也可以檢查 MEM%,以查看系統記憶體的使用量。

NAMEVIRTRESCPU%MEM%VMLIMIT
postgres: master postgres 27.0.3.145(52003) SELECT [14431]457.66 MB27.7 MB95.152.78unlimited

2.    連線到執行 PostgreSQL 或 Aurora PostgreSQL 的資料庫執行個體

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);

**重要:**在您結束交易之前,請評估每個交易對資料庫和應用程式狀態可能造成的影響。

相關資訊

如何對 Amazon RDS 或 Aurora PostgreSQL 的高 CPU 使用率進行疑難排解?

了解 PostgreSQL 角色與權限

建立角色

psql (位於 PostgreSQL 網站)

pg_stat_activity (位於 PostgreSQL 網站)