GaussDB--Ops巡检-数据库最长事务执行时长超长处理步骤

94 阅读2分钟

告警解释

=======

此告警对应指标“数据库最长事务执行时间”超出配置阈值,此指标反映数据库中执行时间最长的事务执行时长。

对系统的影响

  • 长事务长时间持锁,阻塞业务语句或运维操作的语句执行。

  • 事务不提交,影响存储层面的执行。

    事务不提交部分场景如下:

    1. 锁不释放,导致其他事务等待,线程池满,影响并发,性能劣化。
    2. 创建逻辑复制槽失败。
    3. 逻辑复制槽不推进或推进缓慢。
    4. 影响vacuum,导致表空间膨胀。
    5. 导致节点替换、节点修复、扩容等运维操作失败。

可能原因

  • 业务正常逻辑,需要执行运行时间长的大事务。
  • 存在慢SQL。

处理步骤

  1. 收到告警后,通过查看监控指标查看指标“数据库最长事务执行时间”,确认指标情况以及触发告警的组件。

  2. 通过如下方式处理:

    • 方式一:通过查杀会话终止长事务。

    • 方式二:登录实例数据库,执行如下命令,确认执行时间最长的事务,执行3

      SELECT usename, pid, sessionid, query, state, now() - xact_start as elp from pg_stat_activity where pid !=0 and elp IS NOT NULL and usename not in ('rdsAdmin', 'rdsMetric', 'rdsBackup', 'rdsRepl') and state != 'idle' order by elp desc limit 50;
      

      • pid:线程ID。
      • sessionid:会话ID。
      • elp:事务的执行时长。
  3. 如果已有其他告警或业务已经受到影响,且根据其他告警的分析手段已经确定是长事务导致,可以根据2中方式二查询的内容,确认是否能够终止长事务。

    • 执行如下命令终止,其中pid和sessionid通过2获取。

      SELECT pg_terminate_session($pid, $sessionid);
      
    • 如果没有影响业务,可以执行4开始做分析。

  4. 根据SQL查询出的数据,通过query值进行分析。

    • 如果值对应的内容是业务上符合预期的长事务,对长事务SQL做优化。

    • 如果值对应的内容不是业务上符合预期的长事务,首先执行如下命令,留存当前执行的堆栈信息,便于后续分析:

      SELECT gs_stack($pid);
      

      参考《云数据库 GaussDB 24.1.30 维护指南(for 华为云Stack 8.3.1)》中的“故障管理 > 故障处理 > 数据库故障定位方法 > 性能类问题 > 单SQL性能慢分析”章节分析事务执行时间长的原因。

告警清除

此告警修复后,系统会自动清除此告警,无需手工清除。

参考信息

不涉及。

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…