当数据库存在突发流量导致SQL并发量急剧上升、部分SQL占用大量数据库资源、或者大量未创建索引的SQL被调用等问题影响正常业务时,需要限制问题SQL的并发度,保障大部分的业务正常运转。数据库自治服务DAS支持自动SQL限流,会自动提取SQL特征,通过关键词对问题SQL进行限流。
前提条件
目标数据库实例为:
数据库 | 地域 |
| 自动SQL限流功能依赖异常检测,目标数据实例所属的地域必须支持异常检测。目前支持的地域有: 华东1(杭州)、华东2(上海)、华南1(深圳)、华南2(河源)、华南3(广州)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华东5(南京)、华东6(福州)、西南1(成都)、郑州、中国(香港)、日本(东京)、韩国(首尔)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、菲律宾(马尼拉)、泰国(曼谷)、澳大利亚(悉尼)关停中、阿联酋(迪拜)、沙特(利雅得)、德国(法兰克福)、美国(硅谷)、美国(弗吉尼亚)和英国(伦敦) |
适用场景
自动限流主要应用在以下3种场景:
流量问题:出现缓存穿透或异常调用情况,导致某类SQL并发量急剧上升。
数据问题:存在大订单数据的账号,该账号的相关SQL占用大量数据库资源。
SQL问题:未创建索引的SQL被大量调用,影响正常业务。
功能限制
自动SQL限流的限流模式是通过关键词限流:
支持的SQL类型有SELECT、UPDATE、DELETE和INSERT。
不支持限流INSERT...SELECT...类型的SQL语句。
仅RDS MySQL 8.0和PolarDB MySQL版 5.7、8.0支持限流INSERT类型的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不再设置该参数,直接使用用户的设置。
关于自动SQL限流的详细技术解读,请参见自动SQL限流。
操作步骤
登录DAS控制台。
在左侧导航栏中,单击实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
在左侧导航栏中,单击自治中心。
在自治中心页面,单击右侧自治功能开关。
在自治功能管理 > 自治功能设置页签中,开启自治功能开关,并在优化和限流页签勾选自动限流,然后设置如下参数作为自动限流的触发条件。
参数
描述
CPU利用率大于
CPU利用率阈值,大于等于70%。
活跃会话数量大于
活跃会话数阈值。
与CPU利用率关系为或时,大于等于16。
与CPU利用率关系为且时,大于等于2。
可限流时间段
可以进行自动SQL限流的时间段。
最大限流时间
进行SQL限流的最大时长。
如果最大限流时间设置为0,当数据库实例状态满足自动SQL限流触发阈值时,会触发限流,但是会立即失效。
持续时间大于
持续时间阈值,CPU利用率与活跃会话数量满足限流阈值的持续时间超过此参数值时,触发自动SQL限流。
说明例如在可限流时间段内,自定义触发条件为当CPU使用率大于80%,同时活跃会话数大于64,且该现象持续时间超过2分钟时触发自动限流,同时自动开始跟踪:
如果发现故障未消除,则自动回滚该限流操作。
自动限流触发后,限流操作持续的时间不会超过最大限流时间。
单击确定。
您可以在数据库实例的实例会话中,查看已自动触发的SQL限流,详细操作请参见查看自动SQL限流历史。
可选:单击事件订阅设置,设置自动SQL限流事件通知。
当发生自动SQL限流时,会生成警告级别的DAS事件,请打开开启订阅服务开关,并配置事件通知参数,详情请参见开启事件订阅功能。
查看自动SQL限流历史
登录DAS控制台。
在左侧导航栏中,单击实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
在左侧导航栏,单击实例会话。
在实例会话页面:
单击SQL限流:
在运行中页签,查看正在执行的限流规则。
在运行结束页签,选择需要查看的时间段,查看限流历史记录。
如果在配置自动SQL限流参数时,选中同时KILL执行中的异常SQL,则可以单击结束会话历史记录,查看结束会话的历史记录。
相关文档
相关API
API | 描述 |
采用异步方式,批量设置指定数据库实例的自动SQL限流配置参数。 | |
获取指定数据库实例的自动SQL限流规则。 | |
批量关闭指定数据库实例的自动SQL限流功能。 |