Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云数据库 MySQL:SQL 限流

腾讯云数据库 MySQL:SQL 限流

原创
作者头像
王文安@DBA
发布于 2021-04-08 09:27:32
发布于 2021-04-08 09:27:32
10.7K0
举报

背景

数据库相关的问题中,经常会遇到并发过高的现象,引发这个现象的原因很多,比如慢查询堆积,业务流量突增等等。通常在面对这一类问题的时候,DBA 会比较被动,常规的手段只有定期批量的 kill 低效查询,直到开发的同学临时调整业务查询或者前端业务限流。

定期批量的 kill 存在较多的问题,例如 kill 的操作不一定能及时杀掉低效查询;定期批量的查询实际上不可能跟得上程序发起查询的速度,本质上数据库仍旧处于 hang 死的状态,业务在持续受损。

针对这一类场景,腾讯云数据库 MySQL 在内核层面实现了一个新的功能:SQL 限流,并封装在 DBbrain中,灵活使用这个功能可以快速有效的应对这一类问题。

功能入口

进入数据库智能管家DBbrain的主控制台,页面如下所示:

DBBrain
DBBrain

进入实时会话页面之后,可以看到有 SQL 限流的这个功能 tab:

实时会话
实时会话

SQL 限流任务的详细配置界面如下图:

SQL限流
SQL限流

主要几个选项的作用如下:

  • SQL 类型:可以进行限流的 SQL 类型,包括 select,delete,update,insert,replace。
  • 最大并发数:可以正常执行受限 SQL 的连接数
  • 执行方式:一定时长之后自动关闭;或者是一直持续,直到手动关闭。
  • 限流时间:自动关闭前持续的时间,最大为 1440 分钟。
  • SQL 关键字:被限流的 SQL 语句关键字,可以使用表名,或者是 SQL 文本的一部分。

需要注意的是,最大并发数指的是连接数,而不是 QPS,因此这个限制并不能非常有效的控制住整体的 QPS,如果本身 SQL 的执行效率很高,那么即使并发数限制到 1,整体的 QPS 可能也不会降到非常低。

实际效果

为了验证一下实际的效果,本次测试使用腾讯云数据库 MySQL 5.7 的最新版,并使用腾讯云的云服务器部署 sysbench 客户端,使用 read_only 的测试模型来模拟业务访问压力。持续一段时间之后,sysbench 的输出数据如下:

代码语言:txt
AI代码解释
复制
[ 100s ] thds: 24 tps: 616.50 qps: 8633.22 (r/w/o: 8633.22/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 24 tps: 620.00 qps: 8678.82 (r/w/o: 8678.82/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 24 tps: 620.38 qps: 8689.77 (r/w/o: 8689.77/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 24 tps: 620.81 qps: 8686.73 (r/w/o: 8686.73/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 24 tps: 617.70 qps: 8652.90 (r/w/o: 8652.90/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 24 tps: 611.00 qps: 8549.66 (r/w/o: 8549.66/0.00/0.00) lat (ms,95%): 41.85 err/s: 0.00 reconn/s: 0.00
[ 160s ] thds: 24 tps: 614.50 qps: 8604.52 (r/w/o: 8604.52/0.00/0.00) lat (ms,95%): 41.10 err/s: 0.00 reconn/s: 0.00
[ 170s ] thds: 24 tps: 619.29 qps: 8670.92 (r/w/o: 8670.92/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 180s ] thds: 24 tps: 619.71 qps: 8672.68 (r/w/o: 8672.68/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00

这里针对所有 sbtest 表的查询,设置 1 分钟的限流,且并发数为 1:

设置限流
设置限流

设置完之后看一下实际的效果:

代码语言:txt
AI代码解释
复制
[ 240s ] thds: 24 tps: 620.71 qps: 8690.32 (r/w/o: 8690.32/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 250s ] thds: 24 tps: 619.50 qps: 8669.86 (r/w/o: 8669.86/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 260s ] thds: 24 tps: 620.20 qps: 8683.36 (r/w/o: 8683.36/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 270s ] thds: 24 tps: 612.60 qps: 8582.43 (r/w/o: 8582.43/0.00/0.00) lat (ms,95%): 41.85 err/s: 0.00 reconn/s: 0.00
[ 280s ] thds: 24 tps: 618.31 qps: 8650.48 (r/w/o: 8650.48/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00
[ 290s ] thds: 24 tps: 619.40 qps: 8671.66 (r/w/o: 8671.66/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00
[ 300s ] thds: 24 tps: 618.59 qps: 8664.02 (r/w/o: 8664.02/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00
[ 310s ] thds: 24 tps: 619.61 qps: 8671.11 (r/w/o: 8671.11/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 320s ] thds: 24 tps: 264.90 qps: 6586.44 (r/w/o: 6586.44/0.00/0.00) lat (ms,95%): 376.49 err/s: 2246.51 reconn/s: 0.00
[ 330s ] thds: 24 tps: 52.30 qps: 5346.70 (r/w/o: 5346.70/0.00/0.00) lat (ms,95%): 1648.20 err/s: 3503.80 reconn/s: 0.00
[ 340s ] thds: 24 tps: 54.10 qps: 5452.58 (r/w/o: 5452.58/0.00/0.00) lat (ms,95%): 1352.03 err/s: 3456.59 reconn/s: 0.00
[ 350s ] thds: 24 tps: 54.60 qps: 5416.30 (r/w/o: 5416.30/0.00/0.00) lat (ms,95%): 1427.08 err/s: 3521.60 reconn/s: 0.00
[ 360s ] thds: 24 tps: 53.20 qps: 5383.31 (r/w/o: 5383.31/0.00/0.00) lat (ms,95%): 1648.20 err/s: 3565.41 reconn/s: 0.00
[ 370s ] thds: 24 tps: 56.60 qps: 5580.50 (r/w/o: 5580.50/0.00/0.00) lat (ms,95%): 1327.91 err/s: 3376.50 reconn/s: 0.00
[ 380s ] thds: 24 tps: 434.60 qps: 7581.38 (r/w/o: 7581.38/0.00/0.00) lat (ms,95%): 42.61 err/s: 1178.20 reconn/s: 0.00
[ 390s ] thds: 24 tps: 612.80 qps: 8581.10 (r/w/o: 8581.10/0.00/0.00) lat (ms,95%): 41.10 err/s: 0.00 reconn/s: 0.00
[ 400s ] thds: 24 tps: 616.19 qps: 8631.43 (r/w/o: 8631.43/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00
[ 410s ] thds: 24 tps: 620.09 qps: 8680.52 (r/w/o: 8680.52/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 420s ] thds: 24 tps: 620.40 qps: 8685.16 (r/w/o: 8685.16/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00
[ 430s ] thds: 24 tps: 619.01 qps: 8662.79 (r/w/o: 8662.79/0.00/0.00) lat (ms,95%): 40.37 err/s: 0.00 reconn/s: 0.00
[ 440s ] thds: 24 tps: 619.10 qps: 8667.34 (r/w/o: 8667.34/0.00/0.00) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00

可以看到在 sysbench 侧,出现大量的 err,QPS 下降了约 35%,且平均延迟的 95 分位出现了巨幅的增长,持续 1 分钟之后就马上恢复正常了。限流结束之后,DBbrain 可以看到实际限制的详情:

限制效果
限制效果

拓展一下

实际上,稍微研究一下就会发现,这个 SQL 限流的设置页面,可以把并发数设置到 0,例如:

并发为0
并发为0

那么在实际生效的前后,对比一下差异:

代码语言:txt
AI代码解释
复制
mysql> delete from sbtest.sbtest1 where id = 1;
Query OK, 1 row affected (0.01 sec)

mysql> delete from sbtest.sbtest1 where id = 1;
ERROR 5001 (HY000): SQL rejected by CDB_SQL_FILTER
mysql>

可以看到生效之后,delete 的行为直接被拒绝了,这时候看一下 DBbrain 的限制详情:

限制效果
限制效果

因此这个功能,在需要限制某些表的某些操作的时候,可以作为 SQL 防火墙来使用,比如像这个例子中一样,限制 sbtest 表上的所有 delete 操作。

总结一下

DBbrain 作为默认免费提供的服务,能极大的提升用户排查腾讯云数据库 MySQL 问题的效率,并及时发现和解决大量的隐患,可以多去了解一下其中的功能。

DBbrain 是什么?

数据库智能管家(TencentDB for DBbrain,DBbrain)是腾讯云推出的一款为用户提供数据库性能优化、安全、管理等功能的数据库自治云服务。

DBbrain 利用机器学习大数据手段、专家经验引擎快速复制资深数据库管理员的成熟经验,将大量传统人工的数据库运维工作智能化,服务于云上和云下企业,有效保障数据库服务的安全、稳定及高效运行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL基准测试工具-sysbench安装测试
环境:CentOS6.5,MySQL5.7.22 1.下载 sysbench下载地址 2.安装
星哥玩云
2022/08/16
2K0
MySQL基准测试工具:sysbench 新手入门体验
最初接触这个工具还是在两年前看《高性能MySQL》的时候,那时候没安装上呀,就没弄了、 我就想起来现在 luasql 也没安装上,会不会过段时间这也不是事儿了。
看、未来
2022/05/06
4240
【DB宝82】使用OGG for mysql微服务搭建双主架构(含DDL)
OGG有传统的经典架构,也有最新的微服务,2个都可以远程捕获和应用数据,对数据库服务器是0侵入,而传统的经典架构是纯命令行模式,最新的微服务架构是图形化界面操作,几乎所有操作都可以在界面进行。
AiDBA宝典
2021/12/20
1.4K0
【DB宝82】使用OGG for mysql微服务搭建双主架构(含DDL)
观《中国数据库前世今生》,体验 TencentDB 技术的崛起。
IDC发布报告《中国金融行业分布式事务型数据库市场份额,2023:技术验证结束,迎接高速增长》:在金融整体市场和银行细分市场,腾讯云数据库TDSQL斩获“双料”第一!
不惑
2024/07/18
4870
观《中国数据库前世今生》,体验 TencentDB 技术的崛起。
故障分析 | 数据库表空间被 rm 后,怎么处理
爱可生 DBA 团队成员,负责项目中数据库故障与平台问题解决,对数据库高可用与分布式技术情有独钟。
爱可生开源社区
2021/07/16
7960
MySQL 8.0 information_schema系统库的改进
在表的数量很多时,每次查询I_S会从文件系统中读取每个单独的FRM文件,使用更多的CPU周期来打开表并准备相关的内存数据结构
星哥玩云
2022/08/18
5620
MySQL 8.0 information_schema系统库的改进
Mysql手动全量增量迁移实战
如果可以接受一定时间的停写,可以使用mysqldump+binlog的方式迁移数据
mingjie
2022/05/12
1.5K0
Mysql手动全量增量迁移实战
数据库性能测试:sysbench使用方法详解
官方站点:https://github.com/akopytov/sysbench/
星哥玩云
2022/08/16
4.1K0
性能测试 —— MySQL 基准测试
摘要: 原创出处 http://www.iocoder.cn/Performance-Testing/MySQL-benchmark/ 「芋道源码」欢迎转载,保留摘要,谢谢!
芋道源码
2019/11/09
9.6K0
故障分析 | DROP 大表造成数据库假死
客户数据库出现假死,导致探测语句下发不下去,出现切换。后来经过排查发现是一个大表drop 导致的数据库产生假死,也参考过类似的数据库假死的案例,这里将测试一下不同版本drop table的影响
爱可生开源社区
2022/11/16
9441
【DB宝79】使用OGG微服务快速双向同步RDS数据库
客户需要将华为云rds for MySQL和天翼云rds for MySQL做一个双向同步,当华为云rds宕机的时候,可以切换到天翼云继续提供服务,而且此时,天翼云的数据也可以自动同步到华为云rds,平时只使用华为云的rds,和双A方案有点差异,需要注意的是rds环境不能安装任何的软件,所以,我目前想到的方案有:
AiDBA宝典
2021/12/17
4K0
【DB宝79】使用OGG微服务快速双向同步RDS数据库
技术分享 | MariaDB 10.1.9 迁移到 MySQL 5.7.25
爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查,对数据库有兴趣,对技术有想法。一入 IT 深似海,从此节操是路人。
爱可生开源社区
2020/06/12
2.1K0
技术分享 | MariaDB 10.1.9 迁移到 MySQL 5.7.25
MySQL 之压力测试工具
一、MySQL自带的压力测试工具——Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。mysqlslap为mysql性能优化前后提供了直观的验证依据,系统运维和DBA人员应该掌握一些常见的压力测试工具,才能准确的掌握线上数据库支撑的用户流量上限及其抗压性等问题。 1、更改其默认的最大连接数 在对MySQL进行压力测试之前,需要更改其默认的最大连接数,如下:
小手冰凉
2020/05/27
4.2K0
分布式 | 利用 TiDB DM 将数据从 MySQL 迁移至 DBLE
某客户MySQL实例中数据较大(上T的数据量),需要将MySQL中数据全量/增量快速迁移至DBLE。TiDB DM支持多线程数据导出导入及增量同步,因此选择了TiDB DM为作数据迁移工具。本文以此案例为背景,介绍使用TiDB DM将数据从MySQL迁移至DBLE的方法及遇到的一些问题。
爱可生开源社区
2022/08/16
6720
Sysbench测试云MySQL性能
最近看到一个网友在问(请问一下,每天3~4W次的读写,用什么样子的配置比较好,麻烦推荐一个配置,谢谢 MySQL5.7的.)看着应该是一个比较简单的场景,不过笔者通过这问题在想云MySQL不同的配置他的性能究竟如何?如果推荐了这个用户配置后,他的业务又涨了该如何再选择其他的配置? 所以这里我们可以来测试一下云MySQL的性能,从测试数据上看是否可以更好的解答此用户的问题。
研究僧
2020/04/14
4.2K0
【DB宝92】PG高可用之Citus分布式集群搭建及使用
Citus是Postgres的开源扩展,将Postgres转换成一个分布式数据库,在集群的多个节点上分发数据和查询,具有像分片、分布式SQL引擎、复制表和分布式表等特性。
AiDBA宝典
2022/02/23
4.1K0
【DB宝92】PG高可用之Citus分布式集群搭建及使用
使用Bucardo搭建PG的双主
https://www.xmmup.com/shiyongogg-for-pgweifuwukuaisushuangxiangtongburdsshujukushuangzhu.html
AiDBA宝典
2023/04/26
2.1K0
使用Bucardo搭建PG的双主
数据库压力测试方法概述
在前面的压力测试过程中,主要关注的是对接口以及服务器硬件性能进行压力测试,评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说,整个系统的瓶颈在于数据库。
用户5521279
2020/09/28
4.2K0
数据库压力测试方法概述
MySQL 8.0 新特性:Resource Group 与写入性能优化实战
离 8.0 正式发布已经有一段时间了,随着小版本的不断迭代,MySQL 8.0 也加入了很多有意思/有价值的特性,例如原子 DDL,WriteSet复制,二级密码等,在专栏中也有非常多的介绍。本文介绍的特性是 Resource Group,即资源组,主要用来调度 MySQL 的资源用,其实是一个兼顾了实用性和技巧性的功能,且刚好能解决 MySQL 8.0 对写入性能的一个“负优化”。
王文安@DBA
2020/11/18
1.7K0
MySQL 8.0 新特性:Resource Group 与写入性能优化实战
【DB宝83】使用OGG for PG微服务快速双向同步RDS数据库(双主)
OGG有传统的经典架构,也有最新的微服务,2个都可以远程捕获和应用数据,对数据库服务器是0侵入,而传统的经典架构是纯命令行模式,最新的微服务架构是图形化界面操作,几乎所有操作都可以在界面进行。相关文章可以参考:
AiDBA宝典
2021/12/31
2.1K0
【DB宝83】使用OGG for PG微服务快速双向同步RDS数据库(双主)
推荐阅读
相关推荐
MySQL基准测试工具-sysbench安装测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档