在Hologres多Warehouse场景下,不同Warehouse或用户之间可能因带宽竞争导致关键业务流量受到影响。Gateway流量控制功能为您提供Warehouse级和用户级的入/出方向流量监控与限流能力,帮助您合理分配带宽资源,保障核心业务的稳定性。
功能说明
Hologres V5.0版本起支持Gateway流量控制,包含以下能力:
-
流量监控:按Warehouse或用户维度,统计实际承载批量数据的协议流量(bytes/s),并通过监控指标上报。您可以据此观察各Warehouse或用户的带宽使用情况。
-
流量限制:通过SQL动态设置Warehouse级或用户级的入/出方向字节速率限额。当实际流量超过限额时,系统会自动对受控流量进行限速,避免单一业务占用过多带宽。
核心规则如下:
-
支持两个维度的限流:Warehouse级(针对整个Warehouse的所有连接)和用户级(针对单个用户的所有连接)。
-
每个维度支持独立设置入方向(Client → Gateway)和出方向(Gateway → Client)的限额,单位为bytes/s。设置为0表示该方向不限速。
-
当Warehouse规则和用户规则同时生效时,取更严格的限制。
-
规则修改后实时同步到所有Gateway,无需重启连接或实例。
使用说明
-
仅Hologres V5.0及以上版本的计算组型实例支持。
-
设置和重置限流规则需要Superuser权限;查询限流规则无限制。
-
限流仅针对特定的协议消息:入方向对COPY生效,出方向对查询结果(DataRow)和COPY生效。SELECT、INSERT等非批量数据传输的协议消息不受入方向限流影响。
-
同一维度下的多个连接共享限流额度,并非按连接单独限流。例如,为Warehouse设置入方向限额3 MiB/s,则该Warehouse下所有连接的入方向总流量将被限制在3 MiB/s左右。
-
多个Gateway之间不做分布式协调,总有效吞吐约等于单个Gateway限额乘以在线Gateway数量。
-
限流为近似限流,允许短时间内的突发抖动,但长期平均速率会收敛到配置值附近。
-
限流生效期间,受控数据的传输速率会下降,但连接保持存活,不会断开。大结果集和COPY场景下,查询仍能正常完成,只是耗时可能增加。
功能语法
设置Warehouse级流量限制
CALL hologres.hg_set_warehouse_traffic_limit(warehouse_name, in_bps, out_bps);
参数说明如下。
|
参数 |
类型 |
说明 |
|
warehouse_name |
TEXT |
Warehouse名称,必须为已存在的Warehouse。 |
|
in_bps |
BIGINT |
入方向payload限额,单位bytes/s。0表示不限。不可为负数。 |
|
out_bps |
BIGINT |
出方向payload限额,单位bytes/s。0表示不限。不可为负数。 |
查询Warehouse级流量限制
SELECT * FROM hologres.hg_show_warehouse_traffic_limit([warehouse_name]);
不传参数或传NULL时返回全部Warehouse的限流规则;指定Warehouse名称时返回该Warehouse的规则,若该Warehouse未配置规则则返回空。
重置Warehouse级流量限制
CALL hologres.hg_reset_warehouse_traffic_limit(warehouse_name);
其中warehouse_name为待重置的Warehouse名称,类型为TEXT。
设置用户级流量限制
CALL hologres.hg_set_user_traffic_limit(user_name, in_bps, out_bps);
参数说明如下。
|
参数 |
类型 |
说明 |
|
user_name |
TEXT |
用户名,必须为已存在的用户。 |
|
in_bps |
BIGINT |
入方向payload限额,单位bytes/s。0表示不限。不可为负数。 |
|
out_bps |
BIGINT |
出方向payload限额,单位bytes/s。0表示不限。不可为负数。 |
查询用户级流量限制
SELECT * FROM hologres.hg_show_user_traffic_limit([user_name]);
不传参数或传NULL时返回全部用户的限流规则;指定用户名时返回该用户的规则。
重置用户级流量限制
CALL hologres.hg_reset_user_traffic_limit(user_name);
其中user_name为待重置的用户名,类型为TEXT。
使用示例
示例1:为Warehouse设置流量限制
为my_warehouse设置入方向限额10 MiB/s、出方向限额20 MiB/s。
CALL hologres.hg_set_warehouse_traffic_limit('my_warehouse', 10485760, 20971520);
示例2:查询指定Warehouse的流量限制
SELECT * FROM hologres.hg_show_warehouse_traffic_limit('my_warehouse');
返回结果示例:
|
warehouse_name |
in_bps |
out_bps |
|
my_warehouse |
10485760 |
20971520 |
示例3:查询所有Warehouse的流量限制
SELECT * FROM hologres.hg_show_warehouse_traffic_limit(NULL);
示例4:为用户设置流量限制
为用户my_user设置入方向限额3 MiB/s、出方向不限速。
CALL hologres.hg_set_user_traffic_limit('my_user', 3145728, 0);
示例5:查询所有用户的流量限制
SELECT * FROM hologres.hg_show_user_traffic_limit(NULL);
返回结果示例:
|
user_name |
in_bps |
out_bps |
|
my_user |
3145728 |
0 |
示例6:重置限流规则
删除my_warehouse的流量限制规则。
CALL hologres.hg_reset_warehouse_traffic_limit('my_warehouse');
删除用户my_user的流量限制规则。
CALL hologres.hg_reset_user_traffic_limit('my_user');