DBbrain 提供 SQL 限流功能,您可以通过创建 SQL 限流任务,自主设置 SQL 类型、最大并发数、限流时间、SQL 关键词,来限制数据库的请求访问量和 SQL 并发量,进而达到服务的可用性,不同的任务之间不会发生冲突。
SQL 限流功能还支持查看、关闭和删除 SQL 限流任务。
支持版本
MySQL:仅支持 MySQL5.7-20200331及以上版本、MySQL5.6-20200915及以上版本、MySQL8.0-20211202及以上版本。
TDSQL-C for MySQL:仅支持 MySQL5.7-2.1.9以上版本、MySQL8.0-3.1.5及以上版本。
使用限制
SQL 限流功能仅支持 SELECT、INSERT、UPDATE、DELETE、REPLACE SQL 类型。
SQL 限流仅支持长度小于5000的 SQL 语句。
操作步骤
创建 SQL 限流任务
1. 登录 DBbrain 控制台。
2. 在左侧导航栏,选择诊断优化。
3. 在页面上方选择数据库类型和实例 ID,选择实时会话页签。
4. 通过以下方式进入创建 SQL 限流任务页面。
方式一:在实时会话页面,选择 SQL 限流页签,单击创建任务。


方式二:在 SQL 统计和活跃会话的操作列单击限流。

方式三:在诊断优化 > 慢 SQL 分析页面,在 SQL 统计中单击具体的慢 SQL 柱形图,在慢 SQL 列表的操作列单击限流。

5. 在创建 SQL 限流任务页面,根据提示配置任务参数,配置完成后,单击确定。
说明:
通过方式二和方式三进入创建 SQL 限流任务页面后:
SQL 关键词会根据 SQL 语句自动分词并填充。
配置完成后,若需要跳转至 SQL 限流任务页面,请单击跳转 SQL 限流。若无需跳转请单击关闭。

创建 SQL 限流配置参数说明如下表所示。
参数 | 说明 |
SQL 类型 | 包括 SELECT、UPDATE、DELETE、INSERT、REPLACE。 |
最大并发数 | 为 SQL 最大并发数,当包含关键词的 SQL 达到最大并发数时会触发 SQL 限流策略。如果该值设为0,则表示限制所有匹配的 SQL 执行。 |
执行方式 | 包括定时关闭和手动关闭。 定时关闭:选择定时关闭后,需设置任务限流时间,提交任务后即开始执行,执行时间结束自动关闭任务。任务执行过程中也支持在任务列表操作列手动关闭任务。 手动关闭:选择手动关闭后,提交任务后将一直执行,直到在任务列表的操作列手动关闭任务,任务才可终止。 |
限流时间 | 请设置 SQL 限流时间。时间范围:[1,1440],单位:分钟。 |
分词模式 | 请选择全分词或模板化分词。 全分词:系统将以英文空格、逗号、换行符、换页符以及制表符为分隔符,自动拆分关键词。 模板化分词:将 SQL 模板化后自动拆分关键词,分词结果不包含用户参数与注释。 |
SQL 关键词 | 为需要限流的 SQL 关键词。注意区分大小写,限流关键词大小写敏感。 可输入 SQL 语句。系统将以英文空格、逗号和换行符为分隔符,自动拆分关键词,多个关键词之间的关系为“逻辑与”,不区分先后顺序。 |
说明:
由于 SQL 关键词按照字符串匹配,且不区分关键词的顺序及是否指代库名表名,所以 SQL 关键词输入的更多,限流越精确。
若需要分库分表限流,SQL 关键词中请输入库名前缀或表名前缀。例如,当需要对存在相同前缀的多个表(例如,user_01、user_02、user_03等)进行限流时,SQL 关键词设置示例如下:


由于 SQL 关键词按照字符串匹配,所以类似以下 SQL 语句也可能会触发上述指定关键词的限流任务。
select *,user_ from server;当实例达到限流任务设置的最大并发数时,含 SQL 的关键词的 SQL 语句被拒绝执行。
SQL 限流中被拒绝语句的错误信息显示为:
SQL rejected by CDB_SQL_FILTER。查看、关闭和删除 SQL 限流任务
1. 进入 SQL 限流任务列表。
2. 查看、关闭和删除 SQL 限流任务。

列表参数说明如下表所示。
参数 | 说明 |
类型 | 包括 SELECT、UPDATE、DELETE、INSERT、REPLACE。 |
状态 | 包括运行中、已完成、已终止、创建失败。 运行中:任务正在执行中。 已完成:执行方式为自动关闭的任务,在指定的任务限流时间结束后自动关闭。 已终止:分为以下两种情况。 执行方式为自动关闭的任务,在指定的任务执行时间结束前手动关闭。 执行方式为手动关闭的任务被手动关闭。 创建失败:创建 SQL 限流任务失败。 |
关键词 | 创建 SQL 限流任务时设置的关键词。 |
开始时间 | 限流任务开始执行时间。 |
剩余时间 | 限流任务剩余的限流时间。 当创建任务时任务执行时间为自动关闭: 当状态为运行中,剩余时间 = 限流时间(创建任务时设置的)- 开始时间 (任务列表中显示的)。 当状态为已完成或已终止,则剩余时间为0。 当创建任务时任务执行时间为手动关闭:剩余时间显示--。 |
最大并发数 | 创建 SQL 限流任务时设置的最大并发数。 设置范围:0-1000。 如果该值设为 0,则表示限制所有匹配的 SQL 执行。 |
来源 | 包括用户发起和自治事件。 用户发起:为实时会话页面创建的 SQL 限流任务。 自治事件:为自治中心页面配置自治服务后触发自动限流自治任务。自治中心详细介绍及操作请参见 自治中心。 |
操作 | 查看任务详情:在操作列单击详情,查看任务的开始时间、执行时间、结束时间、已拒绝 SQL 数。 关闭任务:当需要终止状态为运行中的任务时,可在操作列单击关闭,单击确定。 删除任务:当需要删除状态为已终止或已完成的任务时,可单个或批量删除任务。 单个删除:在任务对应的操作列单击删除,单击确定。 批量删除:在 SQL 限流任务列表选择一个或多个待删除的任务,在任务列表上方单击删除,单击确定。 |