更新时间:2025-12-01 GMT+08:00
分享

异步IO限流

异步IO限流功能仅9.1.1.200及以上集群版本支持。

obs_add_limit_config(access_key, bucket, metric, speed_ratio, expires_s)

描述:存算分离架构下通过添加限流配置来限制OBS请求,达到降低OBS指标的目的。

函数输入参数如下:

名称

类型

描述

access_key

text

用于访问OBS服务的access_key,添加时需要确保系统表PG_TABLESPACE中存在对应的OBS服务配置或者PG_FOREIGN_SERVER中存在对应的OBS服务配置。

bucket

text

访问的OBS桶,该字段可为空字符串,为空字符串时表示需要限制整个OBS租户。

metric

text

被限制的指标,指标包括:conn,read_tps,write_tps,list_tps,total_tps,read_bps,write_bps,total_bps。

speed_ratio

bigint

限速比例,该比例是相对不限速情况下的比值。取值范围为1~100,默认值为80。

expires_s

bigint

限速配置有效期。取值范围 1~3600 ,单位为秒, 默认值为60s。

返回值类型:record

函数返回字段如下:

名称

类型

描述

nodename

text

执行语句的节点名称。

result

boolean

限流配置是否添加成功。

  • t:添加成功。
  • f:添加失败。

示例:

添加限流配置来限制OBS请求。

XXXXXXXXXXXXX表示访问OBS服务的access_key,访问的OBS桶名为test, 被限制的指标conn, 限速比为80,限速配置的有效时间为100秒。使用时请根据业务需求替换为实际值。

1
2
3
4
5
6
SELECT * FROM obs_add_limit_config('XXXXXXXXXXXXX','test','conn','80','100');
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)
-- 

expires_s参数缺省时,表示限速配置的有效时间为默认值60秒。

1
2
3
4
5
SELECT * FROM obs_add_limit_config('XXXXXXXXXXXXX','test','conn','80');
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)

speed_ratio与expires_s参数缺省时,分别表示限速比为80,限速配置的有效时间为60秒。

1
2
3
4
5
SELECT * FROM obs_add_limit_config('XXXXXXXXXXXXX','test','conn');
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)

obs_delete_limit_config(access_key, bucket, metric)

描述:删除当前节点中的OBS限流配置。

函数输入参数如下:

名称

类型

描述

access_key

text

已添加的限流配置的access_key。

bucket

text

已添加的限流配置中的OBS桶名称。

metric

text

已添加的限流配置中的指标。

返回值类型:record

函数返回字段如下:

名称

类型

描述

nodename

text

执行语句的节点名称。

result

boolean

OBS限流配置是否删除成功。

  • t:删除成功。
  • f:删除失败。

示例:

删除当前节点中的OBS限流配置。

XXXXXXXXXXXXX表示访问OBS服务的access_key,访问的OBS桶名为test, 被限制的指标conn。使用时请根据业务需求替换为实际值。

1
2
3
4
5
SELECT * FROM obs_delete_limit_config('XXXXXXXXXXXXX','test','conn');
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)

obs_clear_limit_configs()

描述:清除当前节点中的所有OBS限流配置。

返回值类型:record

函数返回字段如下:

名称

类型

描述

nodename

text

执行语句的节点名称。

result

boolean

限流配置是否清理成功。

  • t:清理成功。
  • f:清理失败。

示例:

清除当前节点中的所有OBS限流配置。

1
2
3
4
5
SELECT * FROM obs_clear_limit_configs();
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)

obs_query_limit_configs()

描述:查询当前节点中的所有OBS限流配置。

返回值类型:record

函数返回字段如下:

名称

类型

描述

nodename

text

执行语句的节点名称。

access_key

bool

OBS限流配置是否删除成功。

  • t:删除成功。
  • f:删除失败。

bucket

text

OBS桶名称。

metric

text

被限制的指标。

speed_ratio

bigint

限速比例。

expires_s

bigint

限速配置的过期时间。

is_expired

boolean

限速配置是否过期。

  • t : 已过期
  • f : 未过期

expiration_time

timestamp

限速配置过期时间。

create_time

timestamp

限速配置首次添加时间。

update_time

timestamp

限速配置更新时间,如果已经存在,后续直接更新update_time。

示例:

查当前节点中的所有OBS限流配置。

查询显示名称为test的OBS桶,被限制的指标conn,其限速比为80,限速配置的过期时间为100秒,当前配置已过期,限速配置首次添加时间为2025-10-11 09:09:43+08等信息。

1
2
3
4
SELECT * FROM obs_query_limit_configs();
   nodename   |      access_key      | bucket | metric | speed_ratio | expires_s | is_expired |    expiration_time     |      create_time       |      update_time       
--------------+----------------------+--------+--------+-------------+-----------+------------+------------------------+------------------------+------------------------
 coordinator1 | xxxxxxxxxxxxxxxxxxxxx|  test  | conn   |          80 |       100 | t          | 2025-10-11 09:11:23+08 | 2025-10-11 09:09:43+08 | 2025-10-11 09:09:43+08

pgxc_obs_add_limit_config(target, access_key, bucket, metric, speed_ratio, expires_s)

描述:存算分离架构下通过添加限流配置来限制OBS请求,达到降低OBS指标的目的。

函数输入参数如下:

名称

类型

描述

target

text

目标节点,默认为all。取值如下:
  • all,表示所有节点。
  • cn,表示全部CN节点。
  • coordinator,表示全部CN节点。
  • dn,表示全部DN节点。
  • datanode,表示全部DN节点。

access_key

text

用于访问OBS服务的access_key,添加时需要确保系统表PG_TABLESPACE中存在对应的OBS服务配置或者PG_FOREIGN_SERVER中存在对应的OBS服务配置。

bucket

text

访问的OBS桶,该字段可为空字符串,为空字符串时表示需要限制整个OBS租户。

metric

text

被限制的指标,指标包括:conn,read_tps,write_tps,list_tps,total_tps,read_bps,write_bps,total_bps。

speed_ratio

bigint

限速比例,该比例是相对不限速情况下的比值。取值范围为 1-100,默认值为 80。

expires_s

bigint

限速配置有效期。取值范围为1~3600,单位为秒, 默认值为60s。

返回值类型:record

函数返回字段如下:

名称

类型

描述

total_instances

int

执行添加配置的节点总数。

success_instances

int

添加限流配置成功的节点数量。

failed_instances

int

添加限流配置失败的节点数量。

failed_nodes

text

添加限流配置失败的节点,会显示添加限流配置失败的具体节点信息。

示例:

1
2
3
4
5
SELECT * FROM pgxc_obs_add_limit_config('all','XXXXXXXXXXXX','test','conn', 70, 1200);
 total_instances | success_instances | failed_instances | failed_nodes 
-----------------+-------------------+------------------+--------------
               4 |                 4 |                0 | 
(1 row)

expires_s参数缺省时,表示限速配置的有效时间为默认值60秒。

1
2
3
4
5
select * from pgxc_obs_add_limit_config('all','XXXXXXXXXXXX','test','conn', 70);
 total_instances | success_instances | failed_instances | failed_nodes 
-----------------+-------------------+------------------+--------------
               4 |                 4 |                0 | 
(1 row)

speed_ratio与expires_s参数缺省时,分别表示限速比为80,限速配置的有效时间为60秒。

1
2
3
4
5
SELECT * FROM pgxc_obs_add_limit_config('all','XXXXXXXXXXXX','test','conn');
 total_instances | success_instances | failed_instances | failed_nodes 
-----------------+-------------------+------------------+--------------
               4 |                 4 |                0 | 
(1 row)

pgxc_obs_delete_limit_config(target,access_key, bucket, metric)

描述:批量删除目标节点中的限流配置。

函数输入参数如下:

名称

类型

描述

target

text

目标节点,默认为all。取值如下:
  • all,表示所有节点。
  • cn,表示全部CN节点。
  • coordinator,表示全部CN节点。
  • dn,表示全部DN节点。
  • datanode,表示全部DN节点。

access_key

text

已添加的限流配置的access_key。

bucket

text

已添加的限流配置中的bucket。

metric

text

已添加的限流配置中的指标。

返回值类型:record

函数返回字段如下:

名称

类型

描述

total_instances

int

执行删除配置的节点总数。

success_instances

int

删除成功的节点数量。

failed_instances

int

删除失败的节点数量。

failed_nodes

text

删除失败的节点,显示删除失败的具体节点信息。

示例:

1
2
3
4
5
SELECT * FROM pgxc_obs_delete_limit_config('all','XXXXXXXXXXXX','test','conn');
 total_instances | success_instances | failed_instances | failed_nodes 
-----------------+-------------------+------------------+--------------
               4 |                 4 |                0 | 
(1 row)

pgxc_obs_clear_limit_configs(target)

描述:批量清除目标节点的所有OBS限流配置。

函数输入参数:target,类型:text,表示目标节点,默认为all。取值如下:

  • all,表示所有节点。
  • cn,表示全部CN节点。
  • coordinator,表示全部CN节点。
  • dn,表示全部DN节点。
  • datanode,表示全部DN节点。

返回值类型:record

函数返回字段如下:

名称

类型

描述

total_instances

int

执行清理配置的节点总数。

success_instances

int

清除成功的节点数量。

failed_instances

int

清除失败的节点数量。

failed_nodes

text

清除失败的节点,显示清除失败的具体节点信息。

示例:

清除所有节点的所有OBS限流配置。

1
2
3
4
5
SELECT * FROM pgxc_obs_clear_limit_configs('all');
 total_instances | success_instances | failed_instances | failed_nodes 
-----------------+-------------------+------------------+--------------
               4 |                 4 |                0 | 
(1 row)

target参数缺省时,默认清除所有节点的所有OBS限流配置。

1
2
3
4
5
SELECT * FROM pgxc_obs_clear_limit_configs();
 total_instances | success_instances | failed_instances | failed_nodes 
-----------------+-------------------+------------------+--------------
               4 |                 4 |                0 | 
(1 row)

pgxc_obs_query_limit_configs(target)

描述:查询目标节点中的所有限流配置。

函数输入参数:target,类型:text,表示目标节点,默认为all。取值如下:

  • all,表示所有节点。
  • cn,表示全部CN节点。
  • coordinator,表示全部CN节点。
  • dn,表示全部DN节点。
  • datanode,表示全部DN节点。

返回值类型:record

函数返回字段如下:

名称

类型

描述

nodename

text

执行语句的节点名称。

access_key

bool

限流配置是否删除成功。

  • t:删除成功。
  • f:删除失败。

bucket

text

OBS桶名称。

metric

text

被限制的指标。

speed_ratio

bigint

限速比例。

expires_s

bigint

限速配置的过期时间。

is_expired

boolean

限速配置是否过期。

  • t : 已过期。
  • f : 未过期。

expiration_time

timestamp

限速配置的过期时间。

create_time

timestamp

限速配置首次添加时间。

update_time

timestamp

限速配置更新时间,如果已经存在,后续直接更新update_time。

示例:

查询所有节点中的所有限流配置。

1
2
3
4
5
6
7
8
SELECT * FROM pgxc_obs_query_limit_configs('all');
   nodename   |      access_key      |     bucket     | metric | speed_ratio | expires_s | is_expired |    expiration_time     |      create_time       |      update_time       
--------------+----------------------+----------------+--------+-------------+-----------+------------+------------------------+------------------------+------------------------
 datanode3    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 datanode2    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 datanode1    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 coordinator1 | XXXXXXXXXXXXX        | test          t| conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
(4 rows)

未指定函数入参target,即使用默认值查询节点中的所有限流配置。

1
2
3
4
5
6
7
8
SELECT * FROM pgxc_obs_query_limit_configs();
   nodename   |      access_key      |     bucket     | metric | speed_ratio | expires_s | is_expired |    expiration_time     |      create_time       |      update_time       
--------------+----------------------+----------------+--------+-------------+-----------+------------+------------------------+------------------------+------------------------
 datanode3    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 datanode2    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 datanode1    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 coordinator1 | XXXXXXXXXXXXX        | test          t| conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
(4 rows)

查询所有DN节点中的所有限流配置。

1
2
3
4
5
6
7
SELECT * FROM pgxc_obs_query_limit_configs('dn');
   nodename   |      access_key      |     bucket     | metric | speed_ratio | expires_s | is_expired |    expiration_time     |      create_time       |      update_time       
--------------+----------------------+----------------+--------+-------------+-----------+------------+------------------------+------------------------+------------------------
 datanode3    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 datanode2    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
 datanode1    | XXXXXXXXXXXXX        | test           | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
(3 rows)

查询所有CN节点中的所有限流配置。

1
2
3
4
5
SELECT * FROM pgxc_obs_query_limit_configs('cn');
   nodename   |      access_key      |     bucket     | metric | speed_ratio | expires_s | is_expired |    expiration_time     |      create_time       |      update_time       
--------------+----------------------+----------------+--------+-------------+-----------+------------+------------------------+------------------------+------------------------
 coordinator1 | XXXXXXXXXXXXX        | test          t | conn   |          70 |      1200 | f          | 2025-10-11 10:07:37+08 | 2025-10-11 09:47:37+08 | 2025-10-11 09:47:37+08
(1 rows)

相关文档