文档首页> 数据仓库服务 GaussDB(DWS)> 管理指南> 监控与告警> 告警管理> 告警处理> DWS_2000000018 集群默认资源池队列阻塞(Queue congestion in the cluster default resource pool)
更新时间:2024-03-28 GMT+08:00

DWS_2000000018 集群默认资源池队列阻塞(Queue congestion in the cluster default resource pool)

告警解释

GaussDB(DWS)通过资源池实现对内存、IO和CPU等资源的控制,并基于优先级调度机制实现资源管理和分配,对用户业务提供资源负载管理服务。某种资源紧张时,可能出现SQL语句阻塞排队,等待其他语句执行完毕后才能执行的现象,详情请参见动态负载管理下的CCN排队

GaussDB(DWS)固定每5分钟检查默认资源池default_pool的队列阻塞情况。如果存在长时间阻塞无法执行的SQL语句(默认20分钟,可配置),则触发集群默认资源池队列阻塞告警;当集群不存在符合告警条件的SQL语句时,自动消除该告警。

如果一直存在能够引发告警的阻塞SQL,那么在24小时(可配置)后将再次发起告警。

告警属性

告警ID

告警级别

是否可自动清除

DWS_2000000018

紧急

告警参数

参数名称

参数含义

告警源

产生告警的系统名称,告警的详细分类。

集群名称

产生告警的集群。

定位信息

产生告警的集群ID,集群名称。

告警信息

CloudService表示产生告警的云服务,依次为服务名,资源标识,资源名称,首次告警时间;格式化告警信息。示例:CloudServiceDWS,resourceId=xxxx-xxxx-xxxx-xxxx,resourceIdName=test_dws,first_alarm_time:2023-01-11:19:02:09;集群test_dws在20分钟内出现默认资源池队列阻塞。

告警时间

告警的产生时间。

状态

告警当前的活动状态。

对系统的影响

默认资源池队列阻塞时,集群内所有关联默认资源池的复杂查询(估算内存大于等于32MB)均有可能排队阻塞,只有当正在运行的查询结束时才会唤醒排队中的查询。

可能原因

  • 查询估算内存过大,导致累积估算内存超过动态可用内存上限引发CCN排队。
  • CPU、IO等公共资源竞争导致正在运行的查询性能出现劣化。

处理步骤

  1. 确认是否由于估算内存过大造成排队。

    请参考动态负载管理下的CCN排队进行排查。

  2. 确认集群可用内存是否正常。

    1. 登录GaussDB(DWS)管理控制台。
    2. 在“告警管理”界面,单击右上角“集群选择”下拉框,选中当前集群,查看集群最近7天的告警信息。通过定位信息锁定触发告警的集群名称。
    3. 在“集群 > 专属集群”界面找到告警集群,在所在行操作列单击“监控面板”进入监控界面。
    4. 选择“监控 > 节点监控 > 概览”可查看当前集群各节点内存使用率的具体情况,如果想要查看某个节点内存的历史监控信息,可单击最右的监控按钮,查看最近1/3/12/24小时的内存使用率指标。

      如果集群内存利用率偏低(例如低于50%),则可判断是大量查询的估算内存偏大导致告警,需要对相关表执行analyze操作。

  3. 确认其他资源竞争是否激烈。

    1. 按照2的方法,查看集群CPU、IO、网络的使用情况。
    2. 如果出现满负载,则查询实时TopSQL将占用资源高的语句杀掉。

  4. 确认是否短时间内提交查询过多。

    1. 通过下面SQL查询任务执行情况。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      SELECT 
         s.resource_pool AS rpname, s.node_group, 
         count(1) AS session_cnt, 
         SUM(CASE WHEN a.enqueue = 'waiting in global queue' THEN 1 ELSE 0 END) AS global_wait, 
         SUM(CASE WHEN s.lane= 'fast' AND a.state = 'active' AND (a.enqueue IS NULL OR a.enqueue = 'no waiting queue') THEN 1 ELSE 0 END) AS fast_run, 
         SUM(CASE WHEN s.lane= 'fast' AND a.enqueue = 'waiting in respool queue' THEN 1 ELSE 0 END) AS fast_wait, 
         SUM(CASE WHEN s.lane= 'slow' AND a.state = 'active' AND (a.enqueue IS NULL OR a.enqueue = 'no waiting queue') THEN 1 ELSE 0  END) AS slow_run, 
         SUM(CASE WHEN s.lane= 'slow' AND (a.enqueue = 'waiting in ccn queue' OR a.enqueue = 'waiting in respool queue') THEN 1 ELSE 0  END) AS slow_wait, 
         SUM(CASE WHEN (a.enqueue IS NULL OR a.enqueue = 'no waiting queue') AND a.state = 'active' THEN statement_mem ELSE 0 END) AS est_mem 
      FROM pgxc_session_wlmstat s,pgxc_stat_activity a 
      WHERE s.threadid=a.pid(+) AND s.attribute != 'Internal' 
      GROUP BY 1,2;
      
      该SQL可能的执行结果示例如下:
      1
      2
      3
      4
      5
          rpname    |  node_group  | session_cnt | global_wait | fast_run | fast_wait | slow_run | slow_wait | est_mem 
      --------------+--------------+-------------+-------------+----------+-----------+----------+-----------+---------
       default_pool | installation |           6 |           0 |        0 |         0 |        0 |         0 |       0
       root         | installation |           1 |           0 |        0 |         0 |        0 |         0 |       0
      (2 rows)
      
    • 如果查询结果中default_pool对应slow_wait列的值不为0,那么说明作业过多导致集群满载从而触发告警。此时可在控制台指定集群所在行操作列选择“监控面板 > 监控 >实时查询”页面,查询执行时间最长的任务并进行查杀。
    • 如果频繁出现集群默认资源池队列阻塞告警,建议考虑对业务进行错峰调度,或划分新的资源池对系统资源进行更加精细化的管理,详情请参见添加资源池

告警清除

集群不存在长时间阻塞无法执行的SQL语句时,自动消除告警。

如果要查看历史阻塞SQL,可在控制台指定集群所在行操作列选择“监控面板 > 监控 > 历史查询”页面,查询过去某段时间内执行的SQL和耗时。