文档

SQL限流

更新时间:

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

前提条件

支持的数据库引擎为:

  • RDS MySQL 5.6、5.7、 8.0

  • PolarDB MySQL版 5.6、5.7、 8.0

  • PolarDB-X 2.0

应用场景

场景

说明

某类SQL并发急剧上升

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

有数据倾斜SQL

例如大促时拉取某个特别大的数据,导致整体系统繁忙。

未创建索引表

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

限流模式

支持的限流模式如下:

参数

说明

支持的数据库

通过关键词限流

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

  • RDS MySQL

  • PolarDB MySQL版

  • PolarDB-X 2.0

通过SQL模板ID限流

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

说明

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

PolarDB-X 2.0

通过执行耗时限流

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

说明

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

PolarDB-X 2.0

操作步骤

  1. 登录DAS控制台

  2. 在左侧导航栏中,单击实例监控

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

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

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

    ss

  6. 在弹出的SQL限流对话框中,配置如下参数。

    参数

    说明

    限流模式

    根据需要选择限流模式,详情请参见限流模式

    SQL类型

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

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

      • RDS MySQL 8.0

      • PolarDB MySQL版 5.7、8.0

      • PolarDB-X 2.0

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

    最大并发度

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

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

    限流时间

    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

    模板ID

    需要限流的SQL模板ID,多个SQL模板ID间用英文逗号(,)分隔。

    说明

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

    SQL执行时间

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

    说明

    限流模式通过执行耗时限流时,需要配置此参数。

    限流SQL ID数量上限

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

    说明

    限流模式通过执行耗时限流时,需要配置此参数。

    被限流SQL的数据库账号

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

    说明

    数据库实例为PolarDB-X 2.0,且限流模式通过关键词限流通过SQL模板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状态,直至等待数量超过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不再设置该参数,直接使用用户的设置。

  7. 单击创建

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

    如您需要关闭修改限流规则,可单击目标规则右侧操作栏的关闭修改按钮。

相关文档

自动SQL限流

相关API

API

描述

EnableSqlConcurrencyControl

启用SQL限流。

DisableSqlConcurrencyControl

关闭指定限流规则。

DisableAllSqlConcurrencyControlRules

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

GetRunningSqlConcurrencyControlRules

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

GetSqlConcurrencyControlRulesHistory

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

GetSqlConcurrencyControlKeywordsFromSqlText

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