美文网首页
CloudDBA新功能上线--SQL过滤/限制/防火墙

CloudDBA新功能上线--SQL过滤/限制/防火墙

作者: 许此一生 | 来源:发表于2018-08-06 14:44 被阅读34次

    摘要:前言CloudDBA是阿里云数据库团队开发的智能诊断和优化平台,可以帮助用户更好使用阿里云数据库。CloudDBA不断提升算法和规则,更好的匹配更多用户场景,刚刚上线了SQL过滤功能,用来解决某类SQL给系统带来的冲击。

    1 前言

    CloudDBA是阿里云数据库团队开发的智能诊断和优化平台,可以帮助用户更好使用阿里云数据库。

    CloudDBA不断提升算法和规则,更好的匹配更多用户场景,刚刚上线了SQL过滤功能,用来解决某类SQL给系统带来的冲击。

    2 功能描述

    匹配用户设置的关键字和并发数,对某类SQL(SELECT/UPDATE/DELETE)进行按并发数限流,当这一类SQL的并发小于并发数的进到Server层,大于并发数的丢弃。

    该功能只能用来救急,不适合长时间运行。

    3 对业务的影响

    3.1 收益

    限制了问题SQL后,保障DB Server端能正常响应正常业务的语句,保障大部分的业务正常运转

    3.2 弊端

    如果设置了SQL防火墙,该SQL被限制后,应用端会收到1317错误,即

    queryexecution was interrupted

    4 适用场景

    如果业务方能够接受舍小(小部分业务损失)保大(大部分业务正常运转),可以进行限流;

    如果不能接受上述报错,就要接受整个业务被拖垮的可能。

    4.1 能解决的场景

    4.1.1 某类SQL并发急剧上升,影响正常业务

    比如缓存穿透,或者异常调用,可能会造成原来并发不大的SQL语句,并发量突然上升

    4.1.2 有数据倾斜SQL,影响正常业务

    比如大促时拉取某个特别大的数据,造成整体系统繁忙

    4.1.3 未创建索引SQL,影响正常业务

    比如新上线SQL调用量特别大,又没有创建索引,造成整体系统繁忙

    4.2 处理误区

    4.2.1 切换主备

    以前碰到上述情况,见有的运维人员是切换主备尝试解决上述问题,主备的配置是一样的,如果主库有问题,同样的请求到备库也是同样的问题,所以切换是解决不了问题的。

    4.2.2 kill问题语句

    kill语句是可以减少系统压力,未尝不是一种处理手段。但是,请求是不断进来的,不停kill语句手都酸了吧?

    4.3 可以尝试的解决方法

    上面提到这个功能只是应急手段那么如何才能解决该类问题呢?

    提高缓存命中率

    使用只读实例

    快速加索引

    5 使用方式

    5.1 路径

    RDS控制台->找到具体实例->CloudDBA->问题诊断->SQL过滤

    5.2 找到要限制的SQL语句

    通过"问题诊断"里面,观察到某类SQL执行特别慢,并发又特别多时,这条语句可能就是问题SQL,经过再三确认(根据经验,跟业务开发,跟老板)后就可以限制并发啦。

    例如:

    想限制下面这类语句:

    SELECT*FROMsbtest4WHEREtop_cmt_id=99738ANDstatusin(1,3)andparent_cmt_id >=0orderbyadd_timedesclimit0,20

    就要执行下面的步骤

    5.3 创建过滤规则

    5.3.1 SQL类型

    是限制SELECT语句还是限制UPDATE语句还是限制DELETE语句,安全起见默认支持SELECT语句,建议您也优先设置SELECT语句

    5.3.2 最大并发度

    该次限制的SQL最大允许在Server端跑多少个

    5.3.3 限流时间

    允许SQL过滤最大执行时间;超过了指定时间,就会自动终止该限制

    5.3.4 SQL关键词

    SQL过滤的匹配关键词,多个关键词之间以~分隔,不要有空格之类的特殊字符

    接着上面的例子,SQL关键词我可以这样拼写

    SELECT~FROM~sbtest4~WHERE~top_cmt_id~status~parent_cmt_id~order~add_time~desc

    5.4 重置/终止过滤规则

    当遇到设置规则错误,或者想提前终止SQL过滤,可以执行该操作。

    5.5 查看过滤历史记录

    凡是对该实例执行过SQL过滤功能的,都可以在这里查到记录,方便排查问题。

    6 注意事项

    该功能只能用来救急,不适合长时间运行

    安全起见默认支持SELECT语句,建议您也优先限制SELECT语句

    该功能只能运行在MySQL 5.6版本

    该功能是内核层面上的改进,无论是使用高安全链路还是普通链路都可以使用

    可以设置多个SQL过滤(根据不同的关键词)

    如果同一类型的SQL关键词设置了多次,限制的并发按这几个并发的和限制

    要限制的SQL语句匹配越严格越精准,对业务影响最小

    如果设置的不够精准,例如SQL关键词是

    SELECT~FROM~sbtest4

    那匹配上述规则的SQL语句,哪怕是正常业务的,也可能被限制掉了

    被限制后的SQL在应用端会出现

    1317 query execution was interrupted

    该限制只对被设置的实例生效,不影响主账号下面的其他实例

    该限制规则只对新链接有效,如果想使用该规则,在设置过规则后,需要把老链接手动kill(在CloudDBA里可做)

    相关文章

      网友评论

          本文标题:CloudDBA新功能上线--SQL过滤/限制/防火墙

          本文链接:https://www.haomeiwen.com/subject/gjfgvftx.html