# 设置DWS异常规则
#### 功能介绍
在DWS数据库中需要运行复杂多样的业务语句，部分不合理业务会耗费大量的资源进行计算，最终可能降低整个数据库的性能。对此DWS支持用户自定义配置多种异常规则，系统会自动对满足异常规则的作业执行终止/降级操作，维持系统的稳定性。
用户可以通过SQL语法配置符合集群资源情况以及业务情况的异常规则组合，关联到资源池即可对相应资源池中的作业生效。如果用户未配置自定义规则，系统支持默认异常规则来保证资源极限情况下系统的稳定性。
#### 约束与限制
- 异常规则仅8.2.0及以上集群版本支持，其中"单个DN最大带宽"异常规则仅8.2.1及以上集群版本支持。
- 8.2.1集群版本支持降级异常规则（存算分离集群不支持降级异常规则），所有异常规则都支持降级行为，降级后仅网络资源抢占降至低优先级：在正常查询无网络请求时，才会调度降级查询的网络请求。
- 默认异常规则仅8.2.0及以上集群版本中生效，升级到8.2.0及以上集群版本时默认异常规则不会生效，用户可自行创建所需规则。
- 9.1.0.100集群版本新增默认异常规则default_memsize，但仅在新安装的9.1.0.100及以上集群版本中生效。升级至9.1.0.100及以上集群版本时默认异常规则不会生效，用户可自行创建所需规则。
- 同一个资源池可以关联多组规则，资源池关联的多组不同的异常规则以"或"的关系生效，满足其中一组的所有条件即可生效。例如，资源池关联两组规则，一组指定elapsedtime=2400， 另一组指定elapsedtime=1200，memsize=2000，那么执行中的作业，满足执行时间达到1200秒且内存使用达到2000MB时，或者执行时间达到2400秒时，都会触发规则终止作业。
- 同一组异常规则中的多个规则以"且"的关系生效，例如：同时设置执行时间elapsedtime=1000，内存大小memsize=500。表示一个作业，执行时间达到1000秒且内存使用达到500MB时，才会终止该作业。仅触发其中一个不会生效。
- 默认异常规则，当用户未关联资源池，或者用户所关联资源池未配置异常规则时默认生效；当用户所关联的资源池关联用户所指定规则时，以用户所关联规则为准。
 
#### 添加异常规则
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在集群列表中单击指定集群名称，进入**"集群详情"**页面。
3. 在上侧导航栏单击**"负载管理"**。
4. 切换至**"异常规则"** 页签，单击**"添加"，** 异常规则参数配置说明请参见[表2]。
   
   
   
   图1添加异常规则   
   ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002587225684.png "点击放大")
   
   
   
5. 确认无误后，单击**"确定"** 。异常规则新建完不会立即生效，需要绑定到相关资源池。请参见[7](https://support.huaweicloud.com/mgtg-dws/dws_01_07231.html#ZH-CN_TOPIC_0000002617625207__li39761551523)。
 
#### 异常规则管理操作
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在集群列表中单击指定集群名称，进入**"集群详情"**页面。
3. 在上侧导航栏单击**"负载管理"**。
4. 切换至**"异常规则"** 页签，用户可对异常规则进行**编辑** 和**删除** 操作。操作步骤如[表3 异常规则管理操作]所示。
   
    表1异常规则管理操作 
   | 操作入口 | 说明                                                                                                                                                                                     |
   |:---|:---|
   | 编辑     | 单击指定异常规则操作列的**"编辑"** ，弹出编辑异常规则页面，修改详情请参见[表2]。 编辑已有异常规则，如果需要删除异常规则中某个异常规则阈值，可将该值清空或设置为-1。 |
   | 删除      | 单击指定异常规则操作列的**"删除"**。 当异常规则已绑定到已有资源池时，不支持删除，需要先与该资源池解绑，再做删除操作。                                                                            |
      
   
   
5. 确认无误后，单击**"确定"**。
 
#### 自定义异常规则和默认异常规则
DWS当前版本支持的自定义异常规则和默认异常规则如下表所示：
 表2自定义异常规则类型 
| 异常阈值类型       | 说明                                                                                     | 取值范围（-1表示取消设置，不支持设置为0） | 支持的异常操作 |
|:---|:---|:---|:---|
| 阻塞时间           | 作业的阻塞时间，单位秒。包括全局并发排队以及局部并发排队的总时间。如果语句中包含子语句，则每个语句排队的时间都计算在内。                           | -1或1\~INT64_MAX-1       | 终止/降级   |
| 执行所消耗时间        | 作业的已被执行时间，单位秒。从开始执行到当前所消耗的时间。如果语句中包含子语句，则每个语句执行的时间都计算在内。                               | -1或1\~INT64_MAX-1      | 终止/降级  |
| 所有DN上CPU总时间  | 作业在所有DN上执行时所耗费的CPU总时间，单位秒。                                                              | -1或1\~INT64_MAX-1      | 终止/降级   |
| 所有DN上CPU总时间倾斜率 | 作业在DN上执行时的CPU时间的倾斜率，需要同elapsedtime一同设置。代表作业执行满足elapsedtime时间之后，开始检测作业CPU时间的倾斜率，每5秒检测一次。 | -1或1\~100              | 终止/降级    |
| DN平均消耗CPU占比   | 作业在所有DN上执行时的平均CPU使用率。                                                                  | -1或1\~100                | 终止/降级  |
| 单DN算子下盘大小       | 作业在单个DN上最大下盘的数据量，单位：兆字节。                                                                | -1或1\~INT64_MAX-1        | 终止/降级   |
| 单个DN上最大带宽        | 作业在单个DN上最大可占用的网络带宽，单位：兆字节。                                                              | -1或1\~INT64_MAX-1       | 终止/降级  |
| 单个DN最大使用的内存大小  | 作业在单个DN上最大使用的内存大小，单位：兆字节。                                                                | -1或1\~INT64_MAX-1        | 终止/降级  |
| 单DN最大表广播数据量    | 作业在单个DN上最大的大表广播数据量，单位：兆字节。                                                             | -1或1\~INT64_MAX-1       | 终止/降级   |
   
表3默认异常规则列表 
| 默认异常规则名称          | 说明                                                                                                      | 支持的异常操作 |
|:---|:---|:---|
| default_cpu_percent | 当集群中有多个作业在运行，资源池CPU使用率达到90%时开始检测（若未配置资源池，则该值即为整个集群CPU使用率），此时如果单个作业的运行时间达到15min并且该作业CPU平均使用率达到50%以上时触发。 | 终止       |
| default_spillsize   | 当集群中作业运行时，单个DN的下盘大小达到整个实例空间的1/10时触发。                                                                    | 终止      |
| default_memsize   | 作业在单个DN上使用的内存大小达到默认集群所有DN最小可用内存的80%以上时触发。**该规则仅9.1.0.100及以上集群版本支持。**                                      | 终止        |
   
