Gateway流量控制

更新时间:
复制 MD 格式

在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');