数据库自治服务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语句进行限流。 |
|
SQL模板限流 | 输入SQL样本,将SQL样本进行模板化处理获取对应的SQL模板,对该类型SQL进行限流。 |
|
对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企业版 |
操作步骤
登录DAS控制台。
在左侧导航栏中,单击智能运维中心 > 实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
在左侧导航栏,单击实例会话。
在会话管理页面,单击SQL限流。
在弹出窗中单击创建限流规则。
在弹出的创建限流规则对话框中,根据不同的数据库引擎配置如下参数。
限流模式为关键词限流时,需要配置此参数。
仅以下数据库引擎支持限流INSERT类型:
RDS MySQL 8.0
PolarDB MySQL版 5.7、8.0
PolarDB-X 2.0
不支持限流
INSERT...SELECT...
类型的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较为复杂情况下,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
。限流模式为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
。当前仅以下数据库引擎支持限流
INSERT
类型:RDS MySQL 8.0
PolarDB MySQL版 5.7、8.0
PolarDB-X 2.0
不支持限流
INSERT...SELECT...
类型的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较为复杂情况下,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
。当前仅以下数据库引擎支持限流
INSERT
类型:RDS MySQL 8.0
PolarDB MySQL版 5.7、8.0
PolarDB-X 2.0
不支持限流
INSERT...SELECT...
类型的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为限流关键词,且关键词大小写敏感(部分早期版本实例不区分)。
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不再设置该参数,直接使用用户的设置。单击提交,完成创建。
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模板限流时,展示此参数。
操作
关闭或修改限流规则的操作按钮。
RDS MySQL
参数 | 说明 |
限流模式 | 根据需要选择限流模式。 |
SQL类型 | 选择SQL类型,取值如下:SELECT、UPDATE、DELETE、INSERT。 说明 |
数据库 | SQL限流的数据库。 说明 限流模式为SQL模板限流时,需要配置此参数。 |
最大并发度 | SQL最大并发数,允许设置的最小值为0。 说明 当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。 |
限流时间 | SQL限流的生效时间。 重要 SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。 |
SQL关键词 | 需要限流的SQL关键词。 说明 |
SQL样本 | 需要限流的样本SQL。 说明 |
RDS PostgreSQL
参数 | 说明 |
限流模式 | RDS PostgreSQL仅支持SQL模板限流。 |
数据库 | 限流SQL的数据库。 |
搜索路径 | 限流SQL的搜索路径。 说明 多个路径间用英文逗号 |
最大并发度 | SQL最大并发数,允许设置的最小值为0。 说明 当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。 |
最大等待数 | 最大等待数。 |
限流时间 | SQL限流的生效时间。 重要 SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。 |
SQL样本 | 需要限流的样本SQL。 说明 |
PolarDB MySQL版
参数 | 说明 |
限流模式 | 根据需要选择限流模式。 |
SQL类型 | 选择SQL类型,取值如下: 说明 |
最大并发度 | SQL最大并发数,允许设置的最小值为0。 说明 当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。 |
数据库 | 限流SQL的数据库。 说明 限流模式为SQL模板限流时,需要配置此参数。 |
限流时间 | SQL限流的生效时间。 重要 SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。 |
SQL关键词 | 需要限流的SQL关键词。 说明 |
SQL样本 | 需要限流的样本SQL。 说明 |
PolarDB-X 2.0
参数 | 说明 |
限流模式 | 根据需要选择限流模式。 |
SQL类型 | 选择SQL类型,取值如下: 说明 |
最大并发度 | SQL最大并发数,允许设置的最小值为0。 说明 当满足限流策略的SQL同时执行,并达到最大并发数时,触发SQL限流。 |
限流时间 | SQL限流的生效时间。 重要 SQL限流是应急措施,建议您按实际需求设置限流时长,用完及时关闭。 |
SQL关键词 | 需要限流的SQL关键词。 说明 |
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,系统将执行以下操作:
相关文档
相关API
API | 描述 |
启用SQL限流。 | |
关闭指定限流规则。 | |
关闭全部正在执行的限流规则。 | |
获取正在执行的限流规则。 | |
获取正在执行或被触发过的限流规则。 | |
根据SQL语句生成限流关键词。 |