更新时间:2025-11-03 GMT+08:00

CREATE EXCEPT RULE

功能描述

用于创建一个异常规则集合。创建时可以指定任意一个或者多个具体的规则阈值,也可以指定触发异常规则后所采取的操作,当前支持终止(abort)和降级(penalty)操作。

分布式数据库中,查询任务由多个节点并行执行,每个节点独立处理部分数据并汇总结果。但若任一节点出现性能瓶颈,即使其他节点快速完成,整个查询仍会被拖慢。在某些极端情况下,一个查询语句可能会占用大量资源,导致节点资源使用率过高,从而引发计算资源或存储资源不足的问题,不仅影响业务运行,还可能导致整个集群性能下降甚至不可用。

DWS提供配置异常规则功能,允许用户设置查询的资源限制(如执行时间、内存、磁盘等),SQL语句在执行时触发异常规则会自动终止,避免异常查询拖垮集群,保障稳定性并减轻DBA运维负担。例如设置查询的最大执行时间,超时则自动终止;设置查询可以使用的磁盘空间大小,超过阈值则自动终止;或者设置查询可以使用的内存量,超过限制则终止。

在DWS资源负载管理中,异常规则需要绑定到资源池后生效,紧接着将执行作业的用户绑定到指定资源池后,总体上才能达到资源负载管理的效果,当用户执行某作业时,若触发异常规则,则作业将被终止。

您也可以通过管理控制台进行资源池和异常规则设置,了解资源池、异常规则介绍及配置,可参见DWS资源管理

注意事项

同一组异常规则中的多个规则以“且”的关系生效,例如:同时设置执行时间elapsedtime=1000,内存大小memsize=500。表示一个作业,执行时间达到1000秒且内存使用达到500MB时,才会终止该作业。仅触发其中一个不会生效。

语法格式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CREATE EXCEPT RULE except_rule_name
       WITH (
            | BLOCKTIME = VALUE,
            | CPUTIME = VALUE,
            | ELAPSEDTIME = VALUE, 
            | CPUSKEWPERCENT = VALUE,
            | SPILLSIZE = VALUE,
            | BROADCASTSIZE = VALUE,
            | MEMSIZE = VALUE,
            | CPUAVGPERCENT = VALUE,
            | BANDWIDTH = VALUE,
            | ACTION = ['abort' | 'penalty']
            );

参数说明

表1 CREATE EXCEPT RULE参数说明

参数

描述

取值范围

except_rule_name

异常规则集名称。

字符串,需符合标识符命名规范

blocktime

作业排队阻塞的最大时间,单位:秒。

数值型,-1,1~INT64_MAX。-1表示不设置,即不限制,下同。

elapsedtime

作业执行的最大时间,单位:秒。

数值型,-1,1~INT64_MAX。

allcputime

作业运行中使用的最大CPU时间,单位:秒。

数值型,-1,1~INT64_MAX。

cpuskewpercent

作业执行时的平均CPU使用率,单位:百分比。

数值型,-1,1~100。

cpuavgpercent

作业执行时的CPU使用倾斜率,单位:百分比。

数值型,-1,1~100。

spillsize

作业执行的最大下盘大小,单位:MB。

数值型,-1,1~INT64_MAX。

broadcastsize

作业执行的最大广播大小,单位:MB。

数值型,-1,1~INT64_MAX。

memsize

作业执行使用的最大内存大小,单位:MB。

数值型,-1,1~INT64_MAX。

bandwidth

作业执行可使用的最大带宽,单位:MB。

数值型,-1,1~INT64_MAX。

基础示例

创建一个异常规则集except_rule1并指定其排队阻塞时间blocktime为3000秒,下盘空间为4000MB,即某个语句排队阻塞超过3000秒且下盘空间超过4000MB,该语句会被终止。

1
CREATE EXCEPT RULE except_rule1 WITH (blocktime=3000, spillsize=4000, action=abort);

创建一个异常规则集except_rule2并指定其memsize规则阈值为5000MB,默认所采取的异常规则操作为abort。

1
CREATE EXCEPT RULE except_rule2 WITH (memsize=3000);

创建一个资源池并绑定异常规则集except_rule3。

1
CREATE resource pool resource_pool_a1 WITH (except_rule='except_rule3');

示例:创建异常规则,当作业执行时间超过10秒,则终止该作业

在DWS资源负载管理中,异常规则需要绑定到资源池后生效,紧接着将执行作业的用户绑定到指定资源池后,总体上才能达到资源负载管理的效果,当用户执行某作业时,若触发异常规则,则作业将被终止,以下示例模拟了这一终止过程。

  1. 先创建一个测试表并导入数据。

    1. 以系统管理员连接数据库执行以下SQL,创建一个名为src的临时表,为后续的INSERT操作提供数据源。
      1
      2
      CREATE SCHEMA test;
      CREATE TABLE test.src AS SELECT 1;
      
    2. 执行以下SQL,创建表test.test。
      1
      2
      DROP TABLE IF EXISTS test.test;
      CREATE TABLE test.test(a int, b numeric(15,2)) WITH(orientation=column);
      
    3. 执行以下SQL,分别为两张表插入2000万行数据。执行时间约半分钟,请等待。
      1
      INSERT INTO test.test SELECT generate_series(1,20000000) % 1000,generate_series(1,20000000) FROM test.src;
      

  2. 创建一个异常规则集except_rule4,设置执行的最大时间elapsedtime为10秒

    1
    CREATE EXCEPT RULE except_rule4 WITH (elapsedtime=10);
    

  3. 创建一个资源池resource_pool_a4,并将异常规则绑定到该资源池。

    1
    CREATE resource pool resource_pool_a4 WITH (except_rule='except_rule4');
    

  4. 创建一个作业用户,并绑定到资源池resource_pool_a4中,密码请用户自定义。

    1
    CREATE USER user4 RESOURCE POOL 'resource_pool_a4' PASSWORD 'password';
    

  5. 授权作业用户user4可以访问表test.test。

    1
    2
    GRANT USAGE ON SCHEMA test TO user4;
    GRANT SELECT ON TABLE test.test TO user4;
    

  6. 以作业用户user4连接数据库,执行以下SQL,超过10秒,语句被终止了。

    1
    SELECT * FROM test.test;
    

  7. 通过PG_EXCEPT_RULE系统表,可以查看异常规则定义。

    1
    SELECT * FROM PG_EXCEPT_RULE WHERE name = 'except_rule4';