# DWS_2000000016 DWS集群查询语句触发下盘量超阈值
#### 告警解释
用户业务查询执行过程中，数据库可能会选择将临时结果暂存到磁盘，简称[算子下盘](https://support.huaweicloud.com/dws_faq/dws_03_2103.html)。
DWS每60秒通过[GS_WLM_SESSION_STATISTICS](https://support.huaweicloud.com/devg-dws/dws_04_0706.html)视图检测CN上正在执行的作业的负载管理记录，并计算所有下盘DN的最大下盘数据量。
如果10分钟（可配置）内存在SQL的下盘量超过5GB（可配置），则上报查询语句触发下盘量超阈值；当集群不存在符合告警条件的SQL语句时，自动消除该告警。修改告警配置详情请参见[修改告警规则]。
![](https://support.huaweicloud.com/mgtg-dws/public_sys-resources/note_3.0-zh-cn.png)
如果一直存在能够引发告警的阻塞SQL，那么在24小时（可配置）后将再次发起告警。
#### 告警属性
| **告警ID**       | 告警归属 | **告警级别** | 告警类型  | 业务类型      | 是否可自动清除 |
|:---|:---|:---|:---|:---|:---|
| DWS_2000000016 | 租户面  | \>5G 紧急  | 操作告警 | 数据仓库服务 | 是       |
   
#### 告警参数
| 类别     | **参数名称** | **参数含义**                     |
|:---|:---|:---|
| 定位信息  | 名称         | DWS集群查询语句触发下盘量超阈值。           |
| 定位信息  | 类型         | 操作告警。                        |
| 定位信息  | 发生时间      | 告警发生时间。                      |
| 附加信息 | 集群ID      | 集群resourceId、domain_id等详细信息。 |
   
![](https://support.huaweicloud.com/mgtg-dws/public_sys-resources/note_3.0-zh-cn.png)
关于附加信息中下盘量，可连接数据库执行SELECT \* FROM GS_WLM_SESSION_STATISTICS查看该视图中的max_spill_size字段。
#### 告警指标
调用[获取指定指标相关采集数据 - 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
  ```
  
- **响应示例** **：**
  告警指标为响应结果中的**max_spill_size/1024**，其中max_spill_size表示如果发生下盘，所有下盘DN的最大下盘数据量，默认为0。
  ```
  {
   "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
  }
  ```
  
 
#### 对系统的影响
下盘量大说明系统I/O资源被大量占用，可能导致数据盘空间不足，引发数据库只读/磁盘满，影响系统可用性，最终导致系统停止服务。
#### 可能原因
- 业务执行过程中正常的数据下盘超过告警阈值。
- 业务SQL的查询执行计划欠佳，大量数据导入内存触发下盘。
- 未及时清理过期数据，导致扫描到过多无效数据而触发下盘。
 
#### 处理步骤
1. **确认执行计划是否欠佳。**
   
   1. 从告警的附加信息中获取SQL语句，对相关表执行[ANALYZE](https://support.huaweicloud.com/sqlreference-dws/dws_06_0245.html)后再次执行SQL，[查看下盘量]是否降低。
   
   2. 如果没有明显效果，则执行EXPLAIN PERFORMANCE查看告警SQL语句实际执行信息，详情请参见[SQL执行计划详解](https://support.huaweicloud.com/devg-dws/dws_04_0432.html)。根据执行信息，如果估算内存使用（operator memory）和峰值内存（Peak Memory）均较大，比如大于max_process_memory的20%，则需要对该查询进行优化，详情请参见[调优流程](https://support.huaweicloud.com/devg-dws/dws_04_0435.html)。
   
   
   
   
2. **检查查询语句触发下盘量超阈值告警的配置是否合理。**
   
   1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
   
   2. 进入"监控 \> 告警 \> 告警规则管理"界面。
   
   3. 在"查询语句触发下盘量超阈值"规则所在行"操作"列单击"修改"，进入"修改告警规则"界面。
   
   4. 如果集群磁盘容量配置较高，可以考虑将上报阈值调大，建议不超过单个数据盘容量的5%。
      ![](https://support.huaweicloud.com/mgtg-dws/public_sys-resources/caution_3.0-zh-cn.png)
      需要注意的是，阈值过大时临时下盘可能会导致磁盘使用率告警甚至集群只读，如果存在数据盘使用率接近或超过80%，调整阈值的同时建议清理无用数据，参考节点数据盘使用率超阈值告警。更详细的界面配置说明参考[告警规则](https://support.huaweicloud.com/mgtg-dws/dws_01_1242.html)。
      
   
   
   
   
3. **查杀下盘量高的SQL语句。**
   
   1. 返回DWS管理控制台。
   
   2. 在"集群 \> 集群列表"界面找到告警集群，在所在行操作列单击"监控面板"进入监控界面。
   
   3. 选择"监控 \> 实时查询"，切换至"实时查询"模块，单击![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002617505245.jpg)，选择"dn上下盘的最大数据量（mb）"，查看下盘量情况。
   
   4. 和业务侧确认后，选中需要终止的查询ID，单击"终止查询"。
   
   5. 调整对业务语句进行磁盘空间管控的数据库参数，具体参数说明请参见[语句磁盘空间管控](https://support.huaweicloud.com/devg-dws/dws_04_0894.html)，操作步骤请参见[修改数据库参数](https://support.huaweicloud.com/mgtg-dws/dws_01_0152.html)。
      例如：sql_use_spacelimit参数默认值为实例所在磁盘空间总容量的10%，如果磁盘空间充足可以适当调大该参数。当出现单DN写盘超过调整的数值时，DWS会主动终止该query的运行，并提示用户单DN写盘量超阈值。
      
      
      ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002587065662.png "点击放大")
      
   
   
   
   
 
#### 告警清除
集群不存在下盘量较大的SQL语句时，自动消除告警。
