SQL限流函数
gs_add_workload_rule(rule_type, rule_name, databases, start_time, end_time, max_workload, option_val)
描述:创建一条SQL限流规则。需要具有sysadmin权限的用户才可执行。
参数:参数介绍请参见表1。
返回值类型:int8
参数名称 |
类型 |
描述 |
取值范围 |
---|---|---|---|
rule_type |
text |
限流规则类型,不区分大小写。 |
“sqlid”:根据Unique SQL ID进行限流。 “select”、“insert”、“update”、“delete”、“merge”:根据查询类型和关键字进行限流。 “resource”:根据系统资源利用率进行实例级别的限流。 |
rule_name |
name |
限流规则名称,用于检索限流规则。 |
任意字符串,可以为NULL。 |
databases |
name[] |
限流规则生效的数据库名称数组,区分大小写。 |
数据库名列表,必须为已创建的数据库名。可以为NULL,表示所有数据库生效。 目前只有指定rule_type为查询类型时,数据库列表才生效,因为Unique SQL ID本身是与库进行绑定的,其只属于某个库;而根据资源利用率的限流规则是对实例生效的,即对所有库生效。 |
start_time |
timestamptz |
限流规则生效的开始时间。 |
可以为NULL,表示从当前时间开始生效。 |
end_time |
timestamptz |
限流规则生效的结束时间。 |
可以为NULL,表示规则一直生效。 |
max_workload |
int8 |
限流规则设置的最大并发数。 |
- |
option_val |
text[] |
限流规则的补充信息。 |
与rule_type匹配,具体匹配关系如下:
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
gaussdb=# SELECT gs_add_workload_rule('sqlid', 'rule for one query', '', now(), '', 20, '{id=32413214}'); gs_add_workload_rule ---------------------- 1 (1 row) gaussdb=# CREATE database db1; gaussdb=# CREATE database db2; gaussdb=# SELECT gs_add_workload_rule('select', 'rule for select', '{db1, db2}', '', '', 100, '{tb1, tb2}'); gs_add_workload_rule ---------------------- 2 (1 row) gaussdb=# SELECT gs_add_workload_rule('resource', 'rule for resource', '{}', '', '', 20, '{cpu-80}'); gs_add_workload_rule ---------------------- 3 (1 row) |
gs_update_workload_rule(rule_id, rule_name, databases, start_time, end_time, max_workload, option_val)
描述:更新一条SQL限流规则,需要重新设置全部参数,不支持只指定部分参数。需要具有sysadmin权限的用户才可执行。
参数:参数介绍请参见表2
返回值类型:BOOLEAN
参数名称 |
类型 |
描述 |
取值范围 |
---|---|---|---|
rule_id |
int8 |
要更新的限流规则ID。 |
- |
rule_name |
name |
限流规则名称,用于检索限流规则。 |
任意字符串,可以为NULL。 |
databases |
name[] |
限流规则生效的数据库名称数组,区分大小写。 |
数据库名列表,必须为已创建的数据库名。可以为NULL,表示所有数据库生效。 目前只有指定rule_type为查询类型时,数据库列表才生效,因为Unique SQL ID本身是与库进行绑定的,其只属于某个库;而根据资源利用率的限流规则是对实例生效的,即对所有库生效。 |
start_time |
timestamptz |
限流规则生效的开始时间。 |
可以为NULL,表示从当前时间开始生效。 |
end_time |
timestamptz |
限流规则生效的结束时间。 |
可以为NULL,表示规则一直生效。 |
max_workload |
int8 |
限流规则设置的最大并发数。 |
- |
option_val |
text[] |
限流规则的补充信息。 |
与rule_type匹配,具体匹配关系如下:
|
示例:
1 2 3 4 5 6 |
gaussdb=# CREATE database db1; gaussdb=# SELECT gs_update_workload_rule(2, 'rule for select 2', '{db1}', now(), '', 50, '{tb1}'); gs_update_workload_rule ------------------------- t (1 row) |
gs_delete_workload_rule(rule_id int8)
描述:删除一条SQL限流规则。需要具有sysadmin权限的用户才可执行。
参数:rule_id,要更新的限流规则ID,类型为int8。
返回值类型:BOOLEAN
示例:
1 2 3 4 5 |
gaussdb=# SELECT gs_delete_workload_rule(3); gs_delete_workload_rule ------------------------- t (1 row) |
gs_get_workload_rule_stat(rule_id)
描述:查询SQL限流规则拦截SQL的次数。需要具有sysadmin权限的用户才可执行。多租场景下,non-PDB调用该函数时正常运行,PDB调用该函数时报错。
参数:rule_id,要查询的限流规则ID,类型为int8。可以指定rule_id为-1,此时表示查询所有的SQL限流规则。
表3 返回值类型说明
名称 |
类型 |
描述 |
---|---|---|
rule_id |
int8 |
SQL限流规则的ID。 |
validate_count |
int8 |
SQL限流规则拦截SQL的次数。 |
示例:
1 2 3 4 5 6 7 8 9 10 11 |
gaussdb=# SELECT * FROM gs_get_workload_rule_stat(1); rule_id | validate_count ---------+---------------- 1 | 0 (1 row) gaussdb=# SELECT * FROM gs_get_workload_rule_stat(-1); rule_id | validate_count ---------+---------------- 1 | 0 2 | 0 (2 rows) |