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'] ); |
参数说明
|
参数 |
描述 |
取值范围 |
|---|---|---|
|
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资源负载管理中,异常规则需要绑定到资源池后生效,紧接着将执行作业的用户绑定到指定资源池后,总体上才能达到资源负载管理的效果,当用户执行某作业时,若触发异常规则,则作业将被终止,以下示例模拟了这一终止过程。
- 先创建一个测试表并导入数据。
- 以系统管理员连接数据库执行以下SQL,创建一个名为src的临时表,为后续的INSERT操作提供数据源。
1 2
CREATE SCHEMA test; CREATE TABLE test.src AS SELECT 1;
- 执行以下SQL,创建表test.test。
1 2
DROP TABLE IF EXISTS test.test; CREATE TABLE test.test(a int, b numeric(15,2)) WITH(orientation=column);
- 执行以下SQL,分别为两张表插入2000万行数据。执行时间约半分钟,请等待。
1INSERT INTO test.test SELECT generate_series(1,20000000) % 1000,generate_series(1,20000000) FROM test.src;
- 以系统管理员连接数据库执行以下SQL,创建一个名为src的临时表,为后续的INSERT操作提供数据源。
- 创建一个异常规则集except_rule4,设置执行的最大时间elapsedtime为10秒
1CREATE EXCEPT RULE except_rule4 WITH (elapsedtime=10);
- 创建一个资源池resource_pool_a4,并将异常规则绑定到该资源池。
1CREATE resource pool resource_pool_a4 WITH (except_rule='except_rule4');
- 创建一个作业用户,并绑定到资源池resource_pool_a4中,密码请用户自定义。
1CREATE USER user4 RESOURCE POOL 'resource_pool_a4' PASSWORD 'password';
- 授权作业用户user4可以访问表test.test。
1 2
GRANT USAGE ON SCHEMA test TO user4; GRANT SELECT ON TABLE test.test TO user4;
- 以作业用户user4连接数据库,执行以下SQL,超过10秒,语句被终止了。
1SELECT * FROM test.test;

- 通过PG_EXCEPT_RULE系统表,可以查看异常规则定义。
1SELECT * FROM PG_EXCEPT_RULE WHERE name = 'except_rule4';
