SQL 限流功能适用于流量过高引起的 CPU 消耗过大的场景。通过创建 SQL 限流任务,用户可自主设置 SQL 类型、最大并发数、限流时间、SQL 关键词,来控制数据库的请求访问量和 SQL 并发量,从而达到服务的可用性。
说明:
SQL 限流支持云数据库 MongoDB 4.0和7.0版本。
SQL 限流中被拒绝语句的错误码显示为
SQL rejected by CDB_SQL_FILTER。创建 SQL 限流
1. 登录 DBbrain 控制台。
2. 在左侧导航栏,选择诊断优化。
3. 在页面上方选择 MongoDB 数据库类型及实例 ID,选择实时会话页签。
4. 在页面下方可选择 SQL 限流模块。
5. 创建限流任务。
说明:
SQL 限流需要数据库账号认证授权。
5.1 请单击登录,输入数据库账号和密码,单击确定。

5.2 在页面中单击创建任务,配置以下参数,单击确定。

SQL 类型:包含
find、insert、update、delete。最大并发数:SQL 最大并发数,当包含关键词的 SQL 达到最大并发数时会触发限流策略。如果该值设为0,则表示限制所有匹配的 SQL 执行。
执行方式:支持定时关闭和手动关闭。
限流时间:选择定时关闭时,需选择 SQL 限流的生效时间。
SQL 关键词:需要限流的 SQL 关键词,当包含多个关键词时,需要以英文逗号分隔,逗号分隔的条件是逻辑与的关系,且逗号不能作为关键词。
6. 查看 SQL 限流任务状态和详情。
单击操作列的详情,可以查看 SQL 限流详情。
限流任务开启后,若还在所设置的限流时间以内,列表中的状态为运行中,单击操作列的关闭,单击确定,可以提前关闭限流任务,状态列将变为已终止。
限流任务开启后,若自动达到所设定的限流时间,列表中的状态将变为已终止。
删除限流任务。支持对状态为已终止和已完成的限流任务进行删除。
单个删除:单击操作列的删除,单击确定。
批量删除:选择一个或多个 SQL 限流任务,在任务列表上方单击删除,单击确定。
SQL 限流配置示例
示例一:对指定集合的所有查询进行限流
场景描述: 需要对
user_data 库下的 users 集合的所有 find 类型请求进行限流,限制同一时刻最大并发数为100。配置步骤:

1. 在创建 SQL 限流任务对话框中,将 SQL 类型设置为
find。2. 将最大并发数设置为100。
3. 执行方式选择定时关闭,并设置限流时间为10分钟。
4. 在 SQL 关键字输入框中填写:user_data,users。
5. 单击确定,完成限流配置。
示例二:对指定集合中特定查询条件的请求进行限流
场景描述: 需要对
user_data 库下 users 集合中查询条件 {user_id: "xxxx"} 的 find 请求进行限流,限制同一时刻最大并发数为 100。配置步骤:

1. 在创建 SQL 限流任务对话框中,将 SQL 类型设置为
find。2. 将最大并发数设置为100。
3. 执行方式选择定时关闭,并设置限流时间为10分钟。
4. 在 SQL 关键字输入框中填写:user_data,users,user_id。
5. 单击确定,完成限流配置。
说明:
本例中配置了三个关键字
user_data、users、user_id,只有同时匹配这三个关键字的 find 请求才会被限流。例如,针对 user_data 库中 users 集合、查询条件为{user_id: "xxxx"}的请求将被限流,而不包含 user_id 字段的查询则不受影响。SQL 限流实战案例
本节通过一个完整的实际场景,演示如何使用 SQL 限流功能快速定位异常流量并实施限流,从而降低实例 CPU 消耗。
场景背景
某 MongoDB 实例出现 CPU 使用率异常升高,需要定位异常流量来源并进行限流处理。
操作步骤
步骤一:通过 MongoTop 定位异常流量
1. 登录 DBbrain 控制台。
2. 在左侧导航栏,选择诊断优化。
3. 在页面上方选择 MongoDB 数据库类型及实例 ID,选择性能趋势页签。
4. 切换至 MongoTop 标签页,查看各集合的表级流量统计。
5. 观察各集合的读写耗时,识别异常流量来源。
如下图所示,
test.test11 集合的总耗时高达 5316ms,远超其他集合,判断为异常流量来源。相比之下,test.test10 集合的耗时为 96ms,属于正常业务流量。

分析结论:
正常业务流量: test.test10(读耗时 96ms)
异常流量来源: test.test11(总耗时 5316ms,明显异常)
步骤二:创建 SQL 限流任务
确认异常流量来源后,针对 test.test11 集合创建 SQL 限流任务。
1. 在页面上方选择实时会话。
2. 选择 SQL 限流页签,单击创建任务。
3. 配置限流任务。

SQL 类型:选择
find。最大并发数:设置为0 ,表示完全拦截所有匹配的请求;若只需降低并发而非完全拦截,可设为大于0的值。
执行方式:设置为手动关闭。
SQL 关键字:输入 test,test11。
4. 单击确定,启动限流任务。
限流任务执行过程中,可在限流任务中单击详情,查看执行详情。
步骤三:验证限流效果
限流任务启动后,可通过性能趋势页面观察 CPU 使用率的变化情况。
1. 在页面上方选择性能趋势。
2. 将时间范围设置为限流前后的时间段(如 14:46 ~ 15:15),对比限流前后的 CPU 变化。
如下图所示,开启限流后实例的 CPU 使用率迅速从高位回落至正常水平,表明限流策略生效,异常流量已被有效拦截。

步骤四:关闭限流任务
当 CPU 使用率恢复至正常水平后,建议观察一段时间确认稳定,可在限流任务中单击关闭,手动关闭限流任务。随后关闭限流任务。
限流任务执行完成后,可在限流任务中单击详情,查看执行结果。

本案例中,限流任务在约13分钟内共拒绝了超过645万次异常请求,有效保护了实例的正常运行。