
# 异步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，100表示不限速。                                                          |
| expires_s   | bigint | 限速配置有效期。取值范围 1\~3600 ，单位为秒， 默认值为60s。                                                       |
   
返回值类型：record
函数返回字段如下：
| 名称       | 类型      | 描述                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|
| nodename | text    | 执行语句的节点名称。                                                                                                                                                                                                                                                                                                                           |
| result   | boolean | 限流配置是否添加成功。 - t：添加成功。  - f：添加失败。   |
   
示例：
添加限流配置来限制OBS请求。
XXXXXXXXXXXXX表示访问OBS服务的access_key，访问的OBS桶名为test， 被限制的指标conn， 限速比为80，限速配置的有效时间为100秒。使用时请根据业务需求替换为实际值。
```
SELECT * FROM obs_add_limit_config('XXXXXXXXXXXXX','test','conn','80','100');
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)
--
```
expires_s参数缺省时，表示限速配置的有效时间为默认值60秒。
```
SELECT * FROM obs_add_limit_config('XXXXXXXXXXXXX','test','conn','80');
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)
```
speed_ratio与expires_s参数缺省时，分别表示限速比为80，限速配置的有效时间为60秒。
```
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。使用时请根据业务需求替换为实际值。
```
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限流配置。
```
SELECT * FROM obs_clear_limit_configs();
   nodename   | result 
--------------+--------
 coordinator1 | t
(1 row)
```
#### obs_query_limit_configs()
描述：查询当前节点中的所有OBS限流配置。
返回值类型：record
函数返回字段如下：
| 名称              | 类型        | 描述                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| nodename        | text      | 执行语句的节点名称。                                                                                                                                                                                                                                                                                                                  |
| access_key      | bool      | 已添加的限流配置的access_key。                                                                                                                                                                                                                                                                                                        |
| 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等信息。
```
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 | 添加限流配置失败的节点，会显示添加限流配置失败的具体节点信息。 |
   
示例：
```
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秒。
```
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秒。
```
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 | 删除失败的节点，显示删除失败的具体节点信息。 |
   
示例：
```
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限流配置。
```
SELECT * FROM pgxc_obs_clear_limit_configs('all');
 total_instances | success_instances | failed_instances | failed_nodes 
-----------------+-------------------+------------------+--------------
               4 |                 4 |                0 | 
(1 row)
```
target参数缺省时，默认清除所有节点的所有OBS限流配置。
```
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。                                                                                                                                                                                                                                                                                                 |
   
示例：
查询所有节点中的所有限流配置。
```
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           | 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，即使用默认值查询节点中的所有限流配置。
```
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           | 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节点中的所有限流配置。
```
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节点中的所有限流配置。
```
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           | 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 row)
```
