GaussDB-SQL限流函数

40 阅读5分钟

GaussDB-SQL限流函数

  • gs_add_workload_rule(rule_type, rule_name, databases, start_time, end_time, max_workload, option_val)

    描述:创建一条SQL限流规则。需要具有sysadmin权限的用户才可执行。只支持在CN节点上执行。

    参数:参数介绍请参见表1

    返回值类型:int8

    参数名称类型描述取值范围
    rule_typetext限流规则类型,不区分大小写。“sqlid”:根据Unique SQL ID进行限流。“select”、“insert”、“update”、“delete”、“merge”:根据查询类型和关键字进行限流。“resource”:根据系统资源利用率进行实例级别的限流。
    rule_namename限流规则名称,用于检索限流规则。任意字符串,可以为NULL。
    databasesname[]限流规则生效的数据库名称数组,区分大小写。数据库名列表,必须为已创建的数据库名。可以为NULL,表示所有数据库生效。目前只有指定rule_type为查询类型时,数据库列表才生效,因为Unique SQL ID本身是与库进行绑定的,其只属于某个库;而根据资源利用率的限流规则是对实例生效的,即对所有库生效。
    start_timetimestamptz限流规则生效的开始时间。可以为NULL,表示从当前时间开始生效。
    end_timetimestamptz限流规则生效的结束时间。可以为NULL,表示规则一直生效。
    max_workloadint8限流规则设置的最大并发数。-
    option_valtext[]限流规则的补充信息。与rule_type匹配,具体匹配关系如下:- “sqlid”:要限流的Unique SQL ID,以及慢SQL管控规则,格式为'{id=1234, time_limit=100, max_execute_time=500, max_iops=1}',其中id指为Unique SQL ID,为必选项,可通过dbe_perf.statement或者pg_stat_activity视图获取。其他选项非必选,其含义参考慢SQL管控规则的Hint。
    • “select”、“insert”、“update”、“delete”、“merge” :要限流的关键字序列,不区分大小写,可以为NULL。
    • “resource” :要限流的资源阈值,形式为'{cpu-80, memory-70}'。当前cpu和memory无论设置为多少,都当成"0"处理。 |

    示例:

    | ``` gaussdb=# SELECT gs_add_workload_rule('sqlid', 'rule for one query', '{}', now(), NULL, 20, '{id=32413214}'); gs_add_workload_rule ---------------------- 1 (1 row) gaussdb=# CEEATE database db1; gaussdb=# CREATE database db2; gaussdb=# SELECT gs_add_workload_rule('select', 'rule for select', '{db1, db2}', NULL, NULL, 100, '{tb1, tb2}'); gs_add_workload_rule ---------------------- 2 (1 row) gaussdb=# SELECT gs_add_workload_rule('resource', 'rule for resource', '{}', NULL, NULL, 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权限的用户才可执行。只支持在CN节点上执行。

    参数:参数介绍请参见表2

    返回值类型:BOOLEAN

    参数名称类型描述取值范围
    rule_idint8要更新的限流规则ID。-
    rule_namename限流规则名称,用于检索限流规则。任意字符串,可以为NULL。
    databasesname[]限流规则生效的数据库名称数组,区分大小写。数据库名列表,必须为已创建的数据库名。可以为NULL,表示所有数据库生效。目前只有指定rule_type为查询类型时,数据库列表才生效,因为Unique SQL ID本身是与库进行绑定的,其只属于某个库;而根据资源利用率的限流规则是对实例生效的,即对所有库生效。
    start_timetimestamptz限流规则生效的开始时间。可以为NULL,表示从当前时间开始生效。
    end_timetimestamptz限流规则生效的结束时间。可以为NULL,表示规则一直生效。
    max_workloadint8限流规则设置的最大并发数。-
    option_valtext[]限流规则的补充信息。与rule_type匹配,具体匹配关系如下:- “sqlid”:要限流的Unique SQL ID,以及慢SQL管控规则,格式为'{id=1234, time_limit=100, max_execute_time=500, max_iops=1}',其中id指为Unique SQL ID,为必选项,可通过dbe_perf.statement或者pg_stat_activity视图获取。其他选项非必选,其含义参考慢SQL管控规则的Hint。
    • “select”、“insert”、“update”、“delete”、“merge”:要限流的关键字序列,不区分大小写,可以为NULL。
    • “resource”:要限流的资源阈值,形式为'{cpu-80, memory-70}',表示触发实例级别限流的操作系统资源阈值,可以为NULL,表示不管资源利用率直接进行限流。 |

    示例:

    | ``` gaussdb=# CREATE database db1; gaussdb=# SELECT gs_update_workload_rule(2, 'rule for select 2', '{db1}', now(), NULL, 50, '{tb1}'); gs_update_workload_rule ------------------------- t (1 row)

    | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    
    
  • gs_delete_workload_rule(rule_id)

    描述:删除一条SQL限流规则。需要具有sysadmin权限的用户才可执行。只支持在CN节点上执行。

    参数:rule_id,要更新的限流规则ID,类型为int8。

    返回值类型:BOOLEAN

    示例:

    | ``` gaussdb=# SELECT gs_delete_workload_rule(3); gs_delete_workload_rule ------------------------- t (1 row)

    | --------------------------------------------------------------------------------------------------------------------- |
    
    
  • gs_get_workload_rule_stat(rule_id)

    描述:查询SQL限流规则拦截SQL的次数。需要具有sysadmin权限的用户才可执行。只支持在CN节点上执行。

    参数:rule_id,要查询的限流规则ID,类型为int8。可以指定rule_id为-1,此时表示查询所有的SQL限流规则。

    表3 返回值类型说明

    名称类型描述
    rule_idint8SQL限流规则的ID。
    validate_countint8SQL限流规则拦截SQL的次数。

    示例:

    | ``` 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)

    | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…