更新时间: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上创建对应的限流规则。

相关文档