# DWS_2000000018 DWS集群默认资源池队列阻塞
#### 告警解释
DWS通过[创建和管理DWS资源池](https://support.huaweicloud.com/mgtg-dws/dws_01_07231.html)实现对内存、IO和CPU等资源的控制，并基于优先级调度机制实现资源管理和分配，对用户业务提供资源负载管理服务。某种资源紧张时，可能出现SQL语句阻塞排队，等待其他语句执行完毕后才能执行的现象，详情请参见[动态负载管理下的CCN排队](https://support.huaweicloud.com/trouble-dws/dws_09_0106.html)。
DWS固定每5分钟检查默认资源池default_pool的队列阻塞情况。如果存在长时间阻塞无法执行的SQL语句（默认20分钟，可配置），则触发集群默认资源池队列阻塞告警；当集群不存在符合告警条件的SQL语句时，自动消除该告警。
![](https://support.huaweicloud.com/mgtg-dws/public_sys-resources/note_3.0-zh-cn.png)
如果一直存在能够引发告警的阻塞SQL，那么在24小时（可配置）后将再次发起告警。
#### 告警属性
| **告警ID**       | 告警归属 | **告警级别** | 告警类型  | 业务类型      | 是否可自动清除 |
|:---|:---|:---|:---|:---|:---|
| DWS_2000000018 | 租户面  | 紧急       | 操作告警 | 数据仓库服务 | 是       |
   
#### 告警参数
| 类别     | **参数名称** | **参数含义**                       |
|:---|:---|:---|
| 定位信息  | 名称       | DWS集群默认资源池队列阻塞。             |
| 定位信息  | 类型     | 操作告警。                        |
| 定位信息  | 发生时间  | 告警发生时间。                       |
| 附加信息 | 集群ID   | 集群resourceId、domain_id等详细信息。 |
   
#### 告警指标
调用[获取指定指标相关采集数据 - ListMetricsData](https://support.huaweicloud.com/api-dws/ListMetricsData.html)API接口获取该告警指标，其中接口中的指标名称为**QueryMonitor**。
- **请求示例** ：
  ```
  GET https://{Endpoint}/v1/{project_id}/clusters/{cluster_id}/dms/metrics/QueryMonitor?offset=0&limit=1&from=1786782138946&to=1786784159004&order_by=ctime&sort_by=desc
  ```
  
- **响应示例** **：**
  告警指标为响应结果中的**resource_pool为default_pool** 且**block_time大于10000**的数据条数。
  ```
  {
   "code": 0,
   "msg": "OK",
   "data": [
    {
     "query_id": "80220368369538752",
     "backend_start": 1786783088,
     "pid": "140504051222312",
     "block_time": 0,
     "application_name": "OM",
     "estimate_total_time": 0,
     "memory_skew_percent": 0,
     "max_peak_memory": 0,
     "iops_skew_percent": 0,
     "min_peak_memory": 0,
     "ctime": 1786783088000,
     "warning": "",
     "min_cpu_time": 0,
     "total_cpu_time": 0,
     "dntime_skew_percent": 0,
     "average_spill_size": 0,
     "query": "/* autopilot */ SELECT pgsac.datname as db_name, pgws.nodename as inst_name, pgsac.pid as pid, pgsac.query_id as query_id, pgws.query_band, null as job_name, null as job_inst, pgsac.usename as user_name, pgsac.application_name, pgsac.client_addr as client_address, pgsac.client_hostname, pgsac.client_port, pgsac.waiting, extract('epoch' from pgws.start_time at time zone 'UTC')::bigint as start_time, pgswlm.block_time, pgws.duration, pgws.estimate_total_time, pgws.estimate_left_time, pgswlm.enqueue, pgswlm.priority, pgsac.resource_pool, pgws.control_group, pgws.min_peak_memory, pgws.max_peak_memory, pgws.average_peak_memory, pgws.memory_skew_percent, pgws.estimate_memory, pgws.spill_info, pgws.min_spill_size, pgws.max_spill_size, pgws.average_spill_size, pgws.spill_skew_percent, pgws.min_dn_time, pgws.max_dn_time, pgws.average_dn_time, pgws.dntime_skew_percent, pgws.min_cpu_time, pgws.max_cpu_time, pgws.total_cpu_time, pgws.cpu_skew_percent, pgws.warning, pgws.average_peak_iops, pgws.iops_skew_percent, pgws.ma",
     "priority": 2,
     "start_time": 0,
     "max_spill_size": 0,
     "db_name": "postgres",
     "average_peak_memory": 0,
     "query_plan": "",
     "query_band": "",
     "job_inst": "",
     "wlm_attrib": "Internal",
     "spill_info": "",
     "virtual_cluster_id": 81882,
     "waiting": false,
     "average_dn_time": 0,
     "user_name": "Ruby",
     "min_spill_size": 0,
     "query_status": "active",
     "resource_pool": "root",
     "duration": 0,
     "client_port": "-1",
     "estimate_memory": 0,
     "elapsed_time": 0,
     "curr_xact_start": 1786783088,
     "client_address": "",
     "lane": "None",
     "query_elapsed_time": 0,
     "control_group": "",
     "average_peak_iops": 0,
     "query_start": 1786783088,
     "max_dn_time": 0,
     "cpu_skew_percent": 0,
     "min_peak_iops": 0,
     "enqueue": "None",
     "job_name": "",
     "client_hostname": "",
     "spill_skew_percent": 0,
     "system_query": true,
     "estimate_left_time": 0,
     "min_dn_time": 0,
     "wlm_status": "running",
     "max_peak_iops": 0,
     "inst_name": "cn_5001",
     "max_cpu_time": 0,
     "state_change": 1786783088
    }
   ],
   "count": 166
  }
  ```
  
 
#### 对系统的影响
默认资源池队列阻塞时，集群内所有关联默认资源池的复杂查询（估算内存大于等于32MB）均有可能排队阻塞，只有当正在运行的查询结束时才会唤醒排队中的查询。
#### 可能原因
- 查询估算内存过大，导致累积估算内存超过动态可用内存上限引发CCN排队。
- CPU、IO等公共资源竞争导致正在运行的查询性能出现劣化。
 
#### 处理步骤
1. **确认是否由于估算内存过大造成排队。**
   
   请参考[动态负载管理下的CCN排队](https://support.huaweicloud.com/trouble-dws/dws_09_0106.html)进行排查。
   
   
2. **确认集群可用内存是否正常。**
   
   1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
   
   2. 在左导航栏选择"监控 \> 告警"，单击右上角"集群选择"下拉框，选中当前集群，查看集群最近7天的告警信息。通过定位信息锁定触发告警的集群名称。
   
   3. 在"集群 \> 集群列表"界面找到告警集群，在所在行操作列单击"监控面板"进入监控界面。
   
   4. 选择"监控 \> 节点监控 \> 概览"可查看当前集群各节点内存使用率的具体情况，如果想要查看某个节点内存的历史监控信息，可单击最右的监控图标![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002617505333.jpg)，查看最近1/3/12/24小时的内存使用率指标。
      如果集群内存利用率偏低（例如低于50%），则可判断是大量查询的估算内存偏大导致告警，需要对相关表执行[analyze](https://support.huaweicloud.com/sqlreference-dws/dws_06_0245.html)操作。
      
   
   
   
   
3. **确认其他资源竞争是否激烈。**
   
   1. 按照[2]的方法，查看集群CPU、IO、网络的使用情况。
   
   2. 如果出现满负载，则查询[实时TopSQL](https://support.huaweicloud.com/devg-dws/dws_04_0397.html)将占用资源高的语句清理掉。
   
   
   
   
4. **确认是否短时间内提交查询过多。**
   
   1. 通过下面SQL查询任务执行情况。
      ```
      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可能的执行结果示例如下：
      ```
      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，那么说明作业过多导致集群满载从而触发告警。此时可在控制台指定集群所在行操作列选择"监控面板 \> 监控 \>实时查询"页面，查询执行时间最长的任务并进行查杀。
   
   - 如果频繁出现集群默认资源池队列阻塞告警，建议考虑对业务进行错峰调度，或划分新的资源池对系统资源进行更加精细化的管理，详情请参见[添加资源池](https://support.huaweicloud.com/mgtg-dws/dws_01_07231.html#ZH-CN_TOPIC_0000002617625207__section1239585215495)。
   
   
   
   
 
#### 告警清除
集群不存在长时间阻塞无法执行的SQL语句时，自动消除告警。
![](https://support.huaweicloud.com/mgtg-dws/public_sys-resources/note_3.0-zh-cn.png)
如果要查看历史阻塞SQL，可在控制台指定集群所在行操作列选择"监控面板 \> 监控 \> 历史查询"页面，查询过去某段时间内执行的SQL和耗时。
