使用 CloudWatch 数据库洞察分析 Amazon Aurora PostgreSQL 的锁定树 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 CloudWatch 数据库洞察分析 Amazon Aurora PostgreSQL 的锁定树

要解决由锁定引起的性能问题,您可以使用 CloudWatch 数据库洞察来分析 Amazon Aurora PostgreSQL 数据库的锁定树,方法如下:

  • 划分者下拉列表:在数据库负载图表中选择阻止对象阻止会话阻止 SQL 维度,以查看排名靠前的各个拦截器在一段时间内对数据库负载的贡献。使用数据库负载图表,您可以分析排名靠前的拦截器是保持恒定还是经常变化。之后,您就可以对拦截器进行故障排除。

    在切片方式下拉列表中选择了“阻止会话”的主要 SQL 表
  • 锁定分析选项卡 – 选择数据库负载分析,然后选择锁定分析选项卡以查看有关数据库中锁定争用的信息。

    数据库负载控制面板中的锁定树表
注意

CloudWatch 数据库洞察支持所有 Aurora PostgreSQL 版本的锁定分析。要分析锁定树,必须启用数据库洞察高级模式。有关如何开启高级模式的信息,请参阅开启适用于 Amazon Aurora 的数据库洞察的高级模式Turning on the Advanced mode of Database Insights for Amazon Relational Database Service

锁定分析选项卡提供有关数据库锁定争用的信息。锁定树可视化会显示来自不同会话的锁定请求之间的关系和依赖关系。

数据库洞察会每 15 秒捕获一次快照。快照显示的是数据库在某个时间点的锁定数据。

注意

当 CloudWatch 检测到高锁定率时,CloudWatch 会在锁定分析选项卡中显示检测到高锁定率横幅。如果 CloudWatch 在连续 15 分钟内每隔 15 秒拍摄一次锁定快照,则表示 CloudWatch 检测到高锁定率。

锁定树中的每个节点代表一个特定的会话。父节点是阻止其子节点的会话。

要分析锁定树,请按照以下流程操作。

分析锁定树的步骤
  1. 登录 Amazon Web Services Management Console并打开 CloudWatch 控制台(https://console.aws.amazon.com/cloudwatch/)。

  2. 选择 Insights

  3. 选择 Database Insights

  4. 选择数据库实例视图。

  5. 选择一个数据库实例。

  6. 选择数据库负载分析选项卡。

  7. 选择锁定分析选项卡。

    要查看数据库实例的锁定数据,请选择 1 天或更短的时间段。

  8. 选择快照窗口。默认情况下,数据库洞察会选择受阻会话最多的快照窗口。

    锁定分析表
  9. 要查看快照的锁定数据,请选择数据库洞察功能拍摄快照的时间。

  10. 要展开锁定树,请选择会话 ID 旁边的箭头。

    锁定树已展开

锁定快照数据

数据库洞察功能可提供每个锁定请求的以下信息。要查看默认情况下未启用的列,请选择锁定树表格的设置图标并启用其他列。

列名称 定义 默认列 备注

session_id

会话唯一标识符。

session_id 派生自 HEX(pg_stat_activity.backend_start).HEX(pg_locks.pid)

pid

此后端的 PID。

pg_locks.pid

blocked_sessions_count

此锁定阻止的会话数。

blocked_sessions_count 派生自此锁定阻止的会话 ID 的数量。

last_query_executed

此会话执行的最后一个查询。对于拦截器来说,其可能不是保留了拦截锁定的查询。

pg_stat_activity.query

wait_event

如果后端当前正在等待,则为等待事件名称,否则值为 NULL。

pg_stat_activity.wait_event

blocking_time_(In Seconds)

自此锁定开始以来的时间(以秒为单位)。

blocking_time_(In Seconds) 派生自第一个 Waiter 的等待事务的开始时间 (pg_locks.waitstart)。

blocking_mode

由阻止会话保留的锁定模式。

pg_locks.mode

waiting_mode

由等待会话请求的锁定模式。

pg_locks.mode

application

连接到此后端的应用程序的名称。

pg_stat_activity.application_name

blocking_txn_start_time

阻止事务的开始时间;如果没有处于活动状态的事务,则为 null。

pg_stat_activity.xact_start

waiting_start_time

等待中的用户会话开始等待此锁定的时间;如果保留锁定,则为 null。

pg_locks.waitstart

session_start_time

用户会话开始的时间。

pg_stat_activity.backend_start

state

后端的状态。

pg_stat_activity.state

wait_event_type

此会话正在等待的等待事件类型。

pg_stat_activity.wait_event_type

last_query_exec_time

最后一次查询开始的时间。

pg_stat_activity.query_start

user

登录到此后端的用户名称。

pg_stat_activity.usename

host

已连接客户端的主机名,如 client_addr 反向 DNS 查找所报告。只有针对 IP 连接,并且仅在已启用 log_hostname 时,此字段才会为非空。

pg_stat_activity.client_hostname

port

客户端用于与此后端通信的 TCP 端口号;如果使用 Unix 套接字,则为 -1。如果此字段为 null,则表示这是一个内部服务器进程。

pg_stat_activity.client_port

client_address

连接到此后端的客户端 IP 地址。如果此字段为 null,则表示客户端是通过服务器计算机上的 Unix 套接字连接的,或者表示这是内部进程,例如 autovacuum。

pg_stat_activity.client_addr

granted

如果保留锁定,则该值为 true;如果等待锁定,则该值为 false。

pg_locks.granted

waiting_tuple

页面内锁定所针对的元组编号;如果目标不是元组,则为 null。

pg_locks.tuple

waiting_page

关系内锁定所针对的页码;如果目标不是关系页面或元组,则为 null。

pg_locks.page

waiting_transaction_id

锁定所针对的事务 ID;如果目标不是事务 ID,则为 null。

pg_locks.transactionid

waiting_relation

锁定所针对的关系 OID;如果目标不是关系或关系的一部分,则为 null。

pg_locks.relation

waiting_object_id

锁定目标在其系统目录中的 OID;如果目标不是通用数据库对象,则为 null。

pg_locks.objid

waiting_database_id

锁定目标所在数据库的 OID;如果目标是共享对象,则为零;如果目标是事务 ID,则为 null。

pg_locks.database

waiting_database_name

锁定目标所在数据库的名称。

pg_stat_activity.datname

waiting_locktype

可锁定对象的类型:relation、extend、frozenid、page、tuple、transactionid、virtualxid、spectoken、object、userlock、advisory 或 applytransaction。

pg_locks.locktype

is_fastpath

如果使用快速路径获取锁定,则该值为 true;如果从主锁定表中获取,则该值为 false。

pg_locks.fastpath

有关 pg_stat_activitypg_locks 视图中值的更多信息,请参阅 PostgreSQL 文档中的以下主题。