基于MySQL内核的SQL限流设计与实现|得物技术

一、引言

编写目的

本文详细描述了SQL限流特性的需求设计方案以及使用方式,开发、测试人员可根据本文实现功能的开发、测试,DBA可根据本文合理使用SQL限流功能。

需求概述

生产环境中可能出现由于业务量增长过快或者慢SQL等原因导致CPU使用率打满,当CPU打满时,会影响所有依赖该数据库实例的业务,因此需要有手段限制影响CPU的业务执行,保证其他核心业务不受影响。

SQL限流的目标是在出现CPU使用率打满影响所有业务时,通过限制非核心业务或者慢SQL的业务,实现核心业务的快速恢复。

软件结构

MySQL软件结构如下图所示:

01.jpg

参考资料

MySQL官网:https://dev.mysql.com/doc/refman/5.7/en/

二、概要设计

架构设计

02.jpg

总体架构如图所示,SQL限流的主要功能在执行器工作阶段通过限流规则与查询串的匹配来实现。

流程图

03.jpg

三、详细设计

功能设计

对外接口

针对SQL限流功能设计对外提供管理命令,如下:

  • 开关控制命令(du_flow_control)

04.jpg

用于控制限流功能是否启用。

  • 大小写敏感命令(du_flow_control_case_sensitive)

05.jpg

用于控制限流规则匹配时是否大小写敏感。

  • 预留用户命令(du_flow_control_reserve_user)

06.jpg

限流功能对于预留用户不生效。

预留用户参数以字符串的形式接受输入,如果存在多个预留用户,使用 ‘,’ 进行分隔。

在服务启动时,需格式化该参数,后续在做限流判断时,需要根据格式化之后参数识别是否是预留用户,如果是预留用户,则不进行限流操作,无需进行后续的限流规则匹配。

预留用户参数接受NULL和空串 ‘’,当该参数为NULL或空串时,表明所有用户都不是预留用户。

对于预留用户字符串的处理,与MySQL社区对于用户名的处理逻辑保持一致,即忽略每个用户名前后的无意义字符(如空格、换行等),保留用户名之间的无意义字符。

  • 分隔符设置命令(du_flow_control_delimiter)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值