如果查询长时间没有返回结果,则需要确认查询是否处于锁等待状态。AnalyticDB PostgreSQL版新增锁诊断功能,帮助您快速诊断数据库中的锁情况。

前提条件

  • 实例资源类型为存储弹性模式。
  • 引擎版本为6.0。

操作步骤

  1. 登录云原生数据仓库AnalyticDB PostgreSQL版控制台
  2. 在控制台左上角,选择实例所在地域。
  3. 找到目标实例,单击实例ID。
  4. 在左侧导航栏中,选择诊断与优化 > 查询分析
  5. 单击锁诊断页签。
  6. 锁诊断页面介绍如下。
    锁诊断列表

    您可以根据关键字用户名数据库过滤条件查询时间来过滤锁诊断信息。

    锁诊断列表信息如下:

    参数 说明
    SQL 查询语句的SQL文本。
    开始时间 查询语句开始执行的时间。
    进程ID 查询语句所属的进程ID。
    会话ID 查询语句的会话ID。
    数据库 执行该查询语句的数据库。
    状态 查询语句的状态。
    等待时长 查询语句的等待时长。
    用户名 执行该查询语句的用户。
  7. 单击目标诊断信息操作列的诊断,即可查看锁等待属性锁诊断详情
    锁诊断属性和详情

处理方法

如果查询长时间未返回结果且锁诊断页面显示查询状态为锁等待,您可以选择等待之前的查询完成后系统自动执行您的查询任务,也可以结束造成阻塞的查询任务。

您可以取消(Cancel)或结束(Kill)造成阻塞的查询,方法如下。

说明 只有高权限(superuser权限)账号才能取消或结束查询。
  • 取消查询

    查询所属的会话必须在运行中状态才能取消该查询,取消查询后数据库需要花费一定的时间来做清理和事务的回滚。取消查询语句如下:

    SELECT pg_cancel_backend(<进程ID>);

    如果会话已经处于空闲(Idle)状态,则需要使用结束查询的方法。

  • 结束查询

    结束查询语句如下:

    SELECT pg_terminate_backend(<进程ID>);

相关文档

AnalyticDB PostgreSQL版还支持通过pg_stat_activity视图查看SQL的运行信息,详细信息,请参见通过pg_stat_activity分析诊断正在执行的SQL

相关API

API 说明
DescribeWaitingSQLRecords 获取锁诊断列表。
DescribeWaitingSQLInfo 获取锁诊断详细信息。