yuan-er

导航

 

ALM-5101811 Ops巡检-数据库最长事务执行时长超长

告警解释

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

告警属性

告警ID

告警级别

告警类型

告警归属

业务类型

是否可自动清除

5101811

巡检配置

业务质量告警

租户面

云数据库 GaussDB 节点

告警参数

类别

参数名称

参数含义

定位信息

云服务

产生告警的云服务

实例ID

产生告警的实例ID

节点ID

产生告警的节点ID

巡检名称

产生告警的巡检名称

指标编码

产生告警的指标编码

附加信息

租户名称

产生告警的租户名称

实例名称

产生告警的实例名称

租户ID

产生告警的租户ID

云服务

产生告警的云服务

服务

产生告警的服务

微服务

产生告警的微服务

告警源IP

告警源IP

节点角色

产生告警节点的节点角色

指标编码

产生告警节点的指标编码

指标采集值

产生告警节点的指标采集值

指标阈值

产生告警节点的指标阈值

对系统的影响

  • 长事务长时间持锁,阻塞业务语句或运维操作的语句执行。
  • 事务不提交,影响存储层面的执行。
    事务不提交部分场景如下:
    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性能慢分析章节分析事务执行时间长的原因。

     

告警清除

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

参考信息

不涉及。

posted on 2024-10-28 10:59  数据库笔记  阅读(28)  评论(0)    收藏  举报