我想查看 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_activity 和 Enhanced Monitoring 來識別耗用大量系統資源的查詢或程序。在您開啟 Enhanced Monitoring 之後,請將精細度設定為足以查看診斷問題所需資訊的層級。然後,檢閱 pg_stat_activity,以查看資料庫中目前的活動。您也可以檢閱該時間點的 Enhanced Monitoring 指標。
1. 檢視作業系統程序清單指標,以識別耗用資源的查詢。在以下範例中,此程序耗用 RDS 資料庫執行個體約 95% 的 CPU 時間。此程序的程序 ID (pid) 是 14431。此程序正在執行 SELECT 陳述式。您也可以檢查 MEM%,以查看系統記憶體的使用量。
| | | | | |
|---|
| NAME | 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 | unlimited |
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 網站)