更新时间:2026-07-28 GMT+08:00
特性概述
用户场景
在数据库系统运行过程中,时常会遇到突发的业务请求流量过高、或者某些SQL占用资源过高的情况。SQL限流功能可以限制此类SQL的执行,阻止其耗尽数据库资源从而影响正常业务SQL的执行。
功能描述
本特性可以实现多种规则的SQL限流能力,限制CN进程级别的某类SQL语句或全部SQL语句的最大并发数,包括:
- 根据Unique SQL ID进行限流:在明确某条SQL为慢SQL或者占用资源较高时,可以通过Unique SQL ID对该SQL进行限流,避免业务大量执行此SQL而影响其他业务;
- 根据SQL类型及关键字进行限流:在明确某类SQL请求可能会随业务量增长而增长的时候,使用SQL类型和关键字对此类SQL进行限流;
- 根据客户端信息进行限流:在明确某客户端业务会占用资源较高时,可通过客户端信息,包括IP、ApplicationName,进行限流,避免该客户端业务大量执行SQL而影响其他业务。
- 由于某些业务高峰是可以预知的,在仅希望在业务高峰时段对SQL请求进行限制的情况下,可以设置SQL限流的生效时间,避免限流规则常驻系统;
- 当只希望限流规则作用于业务库,而对系统库的SQL不做控制,可以按不同库的维度进行限流;
- 除了对某类SQL进行限流,本特性还提供CN进程级别的限流能力;
- 对于限流规则,提供查询统计的能力,可以查询所有的限流规则,并根据规则列表对限流规则进行管理。此外还可以查询限流规则的生效次数。
规格约束
- 只支持在CN上限流。
- 对于Unique SQL ID限流,需要设置GUC参数enable_resource_track = on,instr_unique_sql_count > 0。
- 对于关键字限流,按照并发度排序,并发度越低优先级越高。关键字不区分大小写,支持模糊匹配。
- 对于客户端信息限流,优先采用精确匹配规则(需同时匹配IP与ApplicationName)。若无生效的精确匹配规则,则针对仅匹配IP或仅匹配ApplicationName的规则,按并发度升序排序,并发度越低者优先级越高。所有关键字均区分大小写,且不支持模糊匹配。
- 数据库名称区分大小写。删除某个数据库,再创建同名的数据库,会导致所有已录入的针对这个数据库的限流规则失效。
- 基于资源的CN进程级别最大活跃并发数限流,按照并发度排序,并发度越低优先级越高,资源利用率的采集存在10s左右的时间差。
- 对于限流周期结束的规则,系统会在下次限流规则触发时将其缓存中的is_valid标记为false。系统表内的is_valid字段由后台线程负责检测与刷新,该过程存在延迟,最长延迟时间不超过10分钟。
- 在事务中对限流规则执行了增、删、改操作且该事务最终被回滚时,会导致限流规则缓存中的数据与限流规则系统表不一致,此时需及时调用gs_refresh_workload_rule_cache函数刷新限流规则缓存。
- 对于SQL限流次数的统计是数据库从启动到当前的累计次数,重启后从0开始统计。
- 游标、存储过程中的SQL语句不会被限流。
- 管理员用户执行的SQL语句不会被限流。
- 限流规则数据库间不共享,创建限流规则时需要连接目标库。如果创建限流规则的CN被剔除并触发全量Build,则会继承全量Build目标CN中的限流规则,因此建议尽量在各个CN上都创建对应的限流规则。
- CN之间由于Unique SQL ID不同,不共享限流规则,需要用户手动在不同的CN上创建对应的限流规则。
父主题: SQL限流