数据库自治服务DAS提供SQL限流功能。您可以通过SQL限流来控制数据库请求访问量和SQL并发量,保障服务的可用性。本文以RDS MySQL为例介绍如何使用SQL限流功能。

前提条件

支持的数据库引擎为:
  • RDS MySQL 5.6、5.7、 8.0
  • PolarDB MySQL 5.6、5.7、 8.0

应用场景

场景 说明
某类SQL并发急剧上升 例如缓存穿透或异常调用,可能会导致SQL并发量突然上升。
有数据倾斜SQL 例如大促时拉取某个特别大的数据,导致整体系统繁忙。
未创建索引SQL 例如SQL调用量特别大,并且没有创建索引,导致整体系统繁忙。

操作步骤

  1. 登录DAS控制台
  2. 在左侧导航栏中单击实例监控
  3. 单击对应的数据库实例名称,进入实例详情页。
  4. 进入实例会话页面,具体操作请参见实例会话
  5. 实例会话页面,单击SQL限流
  6. SQL限流(过滤)对话框,单击页面右上角创建
  7. 创建SQL限流规则对话框中,填入相应信息,单击创建
    配置 说明
    SQL类型 选择SQL类型,取值如下:SELECTUPDATEDELETE
    最大并发度 SQL最大并发数,当包含关键词的SQL达到最大并发数时会触发限流策略。最大并发度允许设置的最小值为1。
    限流时间 SQL限流的生效时间。SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。
    SQL关键词 需要限流的SQL关键词。若您设置多个关键词,则SQL语句中需要同时包含这些关键词才会触发限流规则,多个关键词间用波浪线(~)分隔。不支持只设置SELECT、UPDATE、DELETE为限流关键词,且关键词大小写敏感(部分早期版本实例不区分)。关键词设置举例:如原始语句SELECT min(id), max(id) FROM task_event WHERE gmt_modified < '2020-06-21' AND begin_time > '2020-07-09' AND source IN (527) AND id >= 15673 AND id <= 8015673 ,则对应该语句的限流关键词为 SELECT~min~id~max~id~FROM~task_event~WHERE~gmt_modified~AND~begin_time~AND~source~IN~AND~id~AND~id
    说明 目标SQL规则创建后,当应用端使用了同时包含所有关键词的SQL:
    • RDS MySQL 5.6、RDS MySQL 5.7、PolarDB MySQL 5.6的实例会返回1317错误(query execution was interrupted)。
    • RDS MySQL 8.0和PolarDB MySQL 5.7,PolarDB MySQL 8.0不会返回错误,但相关SQL会处于Concurrency control waiting状态。
  8. SQL限流规则创建完成后,您可以在SQL限流列表查看SQL规则的状态。
    说明 如果您需要提前关闭或修改限流规则,可单击目标规则右侧操作栏的关闭修改按钮。