我需要查看哪些查询正在 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora PostgreSQL 数据库实例上运行。该如何操作?
解决方法
检查正在运行的查询
必须给您的用户账户授予 rds_superuser 角色,以查看在 RDS for PostgreSQL 或 Aurora PostgreSQL 的数据库实例上运行的所有进程。否则,pg_stat_activity 仅显示为其自身进程运行的查询。有关更多信息,请参阅关于统计收集器的 PostgreSQL 文档。
1. 连接到正在运行 PostgreSQL 或 Aurora PostgreSQL 的数据库实例。
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 数据库实例上 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 | 不受限制 |
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 或 Amazon Aurora PostgreSQL 的高 CPU 利用率问题?
创建角色
增强监测
psql的 PostgreSQL 文档
pg_stat_activity的 PostgreSQL 文档