全部产品
Search
文档中心

数据库自治服务 DAS:SQL限流

更新时间:Apr 22, 2025

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

前提条件

支持的数据库引擎为:

  • RDS MySQL 5.6、5.7、8.0。

  • RDS PostgreSQL 14及以上。

  • PolarDB MySQL版 5.6、5.7、8.0。

  • PolarDB-X 2.0。

应用场景

场景

说明

某类SQL并发急剧上升

例如缓存穿透或异常调用,可能会导致SQL并发量突然上升。

有数据倾斜SQL

例如大促时高频查询某些热点数据,导致整体系统繁忙。

未创建索引表

例如SQL调用量特别大,且没有创建索引表,导致整体系统繁忙。

限流模式

模式

说明

支持的数据库

关键词限流

根据SQL语句中的关键词进行匹配从而限流。

说明

不支持针对某个具体的SQL语句进行限流。

  • RDS MySQL

  • PolarDB MySQL版

  • PolarDB-X 2.0

SQL模板限流

输入SQL样本,将SQL样本进行模板化处理获取对应的SQL模板,对该类型SQL进行限流。

  • RDS MySQL 8.0版本且内核小版本为20230630及以上。

  • RDS PostgreSQL 14或以上版本,且实例内核小版本为20230330或以上

  • PolarDB MySQL版

    • 8.0.1版本且内核小版本为8.0.1.1.31及以上。

    • 8.0.2版本且内核小版本为8.0.2.2.12及以上。

对SQL模板ID进行匹配从而限流。SQL模板ID可从SQL日志、会话、EXPLAIN执行结果中获得。

说明

SQL模板ID是长度为8的十六进制字符串。

PolarDB-X 2.0企业版

执行耗时限流

根据SQL执行时间进行限流。创建了该类限流模式的规则后,当指定类型SQL的执行时间超过设定的阈值时,该类型SQL所属的模板ID会被自动加入到限流规则中,SQL会按照规则指定的并发度执行。

说明

您可以同时设置限流SQL模板ID数量上限,达到上限后,便不再自动对其他SQL创建限流规则。

PolarDB-X 2.0企业版

操作步骤

  1. 登录DAS控制台

  2. 在左侧导航栏中,单击智能运维中心 > 实例监控

  3. 找到目标实例,单击实例ID,进入目标实例详情页。

  4. 在左侧导航栏,单击实例会话

  5. 会话管理页面,单击SQL限流

  6. 在弹出窗中单击创建限流规则

  7. 在弹出的创建限流规则对话框中,根据不同的数据库引擎配置如下参数。

  8. RDS MySQL

    参数

    说明

    限流模式

    根据需要选择限流模式

    SQL类型

    选择SQL类型,取值如下:SELECTUPDATEDELETEINSERT

    说明
    • 限流模式关键词限流时,需要配置此参数。

    • 仅以下数据库引擎支持限流INSERT类型:

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

    • 不支持限流INSERT...SELECT...类型的SQL语句。

    数据库

    SQL限流的数据库。

    说明

    限流模式SQL模板限流时,需要配置此参数。

    最大并发度

    SQL最大并发数,允许设置的最小值为0。

    说明

    当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。

    限流时间

    SQL限流的生效时间。

    重要

    SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。

    SQL关键词

    需要限流的SQL关键词。

    说明
    • 限流模式关键词限流时,需要配置此参数。

    • 若您设置多个关键词,则SQL语句中需要同时包含这些关键词才会触发限流规则,多个关键词间用波浪线(~)分隔,且无顺序限制。

      例如原始语句为: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 。

    • 不支持仅设置SELECT、INSERT、UPDATE、DELETE为限流关键词,且关键词大小写敏感(部分早期版本实例不区分)。

    SQL样本

    需要限流的样本SQL。

    说明
    • 限流模式SQL模板限流时,需要配置此参数。

    • 在SQL较为复杂情况下,DAS会对SQL样本在保证SQL模板不变的情况下进行模板化,转换后限流效果不会受到影响。

      例如输入为:select name from das where name = `das` and age = 21 limit 20

      模板化为:select name from das where name = ? and age = ? limit ?

      改写为:select name from das where name = `param0` and age = `param1` limit 20

    RDS PostgreSQL

    参数

    说明

    限流模式

    RDS PostgreSQL仅支持SQL模板限流

    数据库

    限流SQL的数据库。

    搜索路径

    限流SQL的搜索路径。

    说明

    多个路径间用英文逗号,分隔,默认为information_schema,public

    最大并发度

    SQL最大并发数,允许设置的最小值为0。

    说明

    当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。

    最大等待数

    最大等待数。

    限流时间

    SQL限流的生效时间。

    重要

    SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。

    SQL样本

    需要限流的样本SQL。

    说明
    • 限流模式SQL模板限流时,需要配置此参数。

    • 在SQL较为复杂情况下,DAS会对SQL样本在保证SQL模板不变的情况下进行模板化,转换后限流效果不会受到影响。

      例如输入为:select name from das where name = "das" and age = 21 limit 20

      模板化为:select name from das where name = ? and age = ? limit ?

      改写为:select name from das where name = "param0" and age = "param1" limit 20

    PolarDB MySQL版

    参数

    说明

    限流模式

    根据需要选择限流模式

    SQL类型

    选择SQL类型,取值如下:SELECTUPDATEDELETEINSERT

    说明
    • 当前仅以下数据库引擎支持限流INSERT类型:

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

    • 不支持限流INSERT...SELECT...类型的SQL语句。

    最大并发度

    SQL最大并发数,允许设置的最小值为0。

    说明

    当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。

    数据库

    限流SQL的数据库。

    说明

    限流模式SQL模板限流时,需要配置此参数。

    限流时间

    SQL限流的生效时间。

    重要

    SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。

    SQL关键词

    需要限流的SQL关键词。

    说明
    • 限流模式关键词限流时,需要配置此参数。

    • 若您设置多个关键词,则SQL语句中需要同时包含这些关键词才会触发限流规则,多个关键词间用波浪线(~)分隔,且无顺序限制。

      例如原始语句为: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 。

    • 不支持仅设置SELECT、INSERT、UPDATE、DELETE为限流关键词,且关键词大小写敏感(部分早期版本实例不区分)。

    SQL样本

    需要限流的样本SQL。

    说明
    • 限流模式SQL模板限流时,需要配置此参数。

    • 在SQL较为复杂情况下,DAS会对SQL样本在保证SQL模板不变的情况下进行模板化,转换后限流效果不会受到影响。

      例如输入为:select name from das where name = "das" and age = 21 limit 20

      模板化为:select name from das where name = ? and age = ? limit ?

      改写为:select name from das where name = "param0" and age = "param1" limit 20

    PolarDB-X 2.0

    参数

    说明

    限流模式

    根据需要选择限流模式

    SQL类型

    选择SQL类型,取值如下:SELECTUPDATEDELETEINSERT

    说明
    • 当前仅以下数据库引擎支持限流INSERT类型:

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

    • 不支持限流INSERT...SELECT...类型的SQL语句。

    最大并发度

    SQL最大并发数,允许设置的最小值为0。

    说明

    当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。

    限流时间

    SQL限流的生效时间。

    重要

    SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。

    SQL关键词

    需要限流的SQL关键词。

    说明
    • 限流模式关键词限流时,需要配置此参数。

    • 若您设置多个关键词,则SQL语句中需要同时包含这些关键词才会触发限流规则,多个关键词间用波浪线(~)分隔,且无顺序限制。

      例如原始语句为: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 。

    • 不支持仅设置SELECT、INSERT、UPDATE、DELETE为限流关键词,且关键词大小写敏感(部分早期版本实例不区分)。

    SQL模板ID

    需要限流的SQL模板ID,模板ID为长度为8的十六进制字符串, 多个SQL模板ID间用英文逗号,分隔。

    说明

    PolarDB-X为企业版,并且限流模式SQL模板限流时,需要配置此参数。

    最小SQL执行耗时

    SQL执行时间的阈值,当SQL的执行时间大于设置的阈值时,系统会将该类型SQL所属的SQL模板ID加入到限流规则中。

    说明

    PolarDB-X为企业版,并且限流模式执行耗时限流时,需要配置此参数。

    限流SQL ID数量上限

    通过执行耗时限流的SQL模板ID数量上限,达到上限后,系统不再对其他执行时间大于设置阈值的SQL创建限流规则。

    说明

    PolarDB-X为企业版,并且限流模式执行耗时限流时,需要配置此参数。

    被限流SQL的数据库账号

    被限流SQL所属的数据库账号。

    说明

    限流模式关键词限流SQL模板限流时,需要配置此参数。

    说明

    目标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状态,直至等待数量超过参数ccl_max_waiting_count的值(如果实例版本支持该参数)时,会返回错误码和错误描述Concurrency control waiting count exceed max waiting count,错误码分别是:

      • RDS MySQL 8.0为ERROR 7534 (HY000)

      • PolarDB MySQL版 5.7为ERROR 3277 (HY000)

      • PolarDB MySQL版 8.0为ERROR 7533 (HY000)

      其中,若ccl_max_waiting_count参数值为默认值0时,所有被限流的SQL均会处于Concurrency control waiting状态,不返回错误。通过DAS限流时,若该参数值为0,DAS会将其值设置为DAS的默认值(当前默认值为10);若用户将其设置为大于0的其他值,DAS不再设置该参数,直接使用用户的设置。

  9. 单击提交,完成创建。

    SQL限流规则创建完成后,您可以在运行中页签查看SQL限流规则的相关信息。列表中的参数信息如下:

    说明

    不同的数据库引擎和限流模式,列表中的参数略有差异。

    参数

    说明

    限流模式

    您所选择的模式。

    限流规则

    • 关键字限流:限流关键字配置信息。

    • SQL模板限流:该限流样本对应的模板ID信息。

    • 执行耗时限流:配置的执行耗时的执行时间阈值/限流模板SQL的数量。

    最大并发度

    SQL最大并发数。

    最大等待数

    限流规则配置的最大等待数。

    说明

    数据库实例为RDS PostgreSQL, 且限流模式SQL模板限流时,展示此参数。

    限流时间(分钟)

    SQL限流的生效时间。

    开始时间

    限流规则配置时间(生效时间)。

    剩余时间

    限流规则失效的剩余时间。

    限流SQL样本

    限流SQL样本配置。

    说明

    限流模式SQL模板限流时,展示此参数。

    限流模板ID

    限流SQL样本对应模板ID。

    说明

    限流模式SQL模板限流时,展示此参数。

    状态

    运行中规则为启用状态。

    数据库

    限流SQL数据库。

    说明

    限流模式SQL模板限流时,展示此参数。

    搜索路径

    限流SQL对应的搜索路径。

    说明

    数据库实例为RDS PostgreSQL, 且限流模式SQL模板限流时,展示此参数。

    匹配SQL数量

    限流规则配置下,匹配到的SQL数量。

    说明

    限流模式SQL模板限流时,展示此参数。

    等待SQL数量

    限流规则配置下,正在等待SQL数量。

    说明

    限流模式SQL模板限流时,展示此参数。

    操作

    关闭修改限流规则的操作按钮。

相关文档

自动SQL限流

相关API

API

描述

EnableSqlConcurrencyControl

启用SQL限流。

DisableSqlConcurrencyControl

关闭指定限流规则。

DisableAllSqlConcurrencyControlRules

关闭全部正在执行的限流规则。

GetRunningSqlConcurrencyControlRules

获取正在执行的限流规则。

GetSqlConcurrencyControlRulesHistory

获取正在执行或被触发过的限流规则。

GetSqlConcurrencyControlKeywordsFromSqlText

根据SQL语句生成限流关键词。