专栏首页TencentDB使用小节大批量合并insert导致的MySQL性能问题分析
原创

大批量合并insert导致的MySQL性能问题分析

问题反馈

用户反馈insert待入库的队列堆积,当前还有1000W+的insert在消息队列中等待入口,请求堆积严重,怀疑数据库性能有问题

入库队列拥堵值

用户质疑

分析如下两张图中的时间点,那么如果是因为大量合并insert导致的IO瓶颈,那么下午两点的时候,宿主机IO负载降低到正常水平时,通过分析慢查询日志,发现insert指令执行反而更慢,拥塞反而更严重?

错误码、业务量级、入库队列拥堵值
实例维度以及宿主机维度的信息

排查问题

show processlist发现,有大量合并后的批量insert

实例活跃线程

查看云控制台和后台监控信息,可以看到IO已经打满了

实例维度以及宿主机维度的磁盘写入监控图

查看实例详细的数据监控,我们可以看到

实例详细监控数据

解答客户疑惑:

  • 为什么只有故障那天异常,客户一直都是如此使用的,之前的时候队列不会如此拥塞?

由于批量合并insert超出了吞吐极限,导致写了磁盘,导致了出现异常,异常原因及原理参考上面截图

-当宿主机IO负载降低到正常水平时,通过分析慢查询日志,发现insert指令执行反而更慢,拥塞反而更严重

上午磁盘IO高的原因是请求在正常执行,写log buffer都是写内存,下午磁盘IO低的原因是写了物理磁盘,导致请求堆积,请求处理变慢,比如之前每秒处理10个请求,当然IO也高,由于SQL执行快因此队列不拥堵,但是一旦log buffer写满了,要写物理盘,那么现在每秒处理1个请求,IO当然会降低,队列肯定会拥堵

解决方案

  • insert合并量级调整,从200调整到50(客户已完成)
  • 大量insert插入对宿主机磁盘IO性能要求较高,迁移至宿主机IO利用率低的迁移
  • 该库还做运营查询,因为写入量太大,容易拥塞,建议读写分离
  • 业务层做水平拆分,把对于一个实例的写入请求拆分到多个实例

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • TencentDB for MySQL主机监控备机监控的说明

    4个指标怎么看呢?实际上是在 已经搭建主从同步的slave端执行 show slave status的结果,如下所示:

    于航
  • waiting for table metadata lock的一种解决方法

    对MySQL进行alter table等DDL操作时,有时会发现对某个表的任何操作都被阻塞,包括读,报错如下图所示

    于航
  • 数据库监控断点业务中断的一种案例及分析

    问题已经分析出来了,就是某个SQL阻塞了其他请求,那么如何找到这条SQL呢?有两种方式

    于航
  • 深入浅出Unix IO模型

    前言 在介绍Unix IO模型之前,我们先来说说什么是IO。根据维基百科的定义,IO 指的是输入输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入...

    黄泽杰
  • 深入浅出Unix IO模型

    在介绍Unix IO模型之前,我们先来说说什么是IO。根据维基百科的定义,IO的指的是输入输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出...

    黄泽杰
  • Flutter 大小单位详解

    关于Flutter 大小所使用的单位,官方文档没有给出非常明确的解释,因此一直存在模糊的说法,许多从事安卓开发者直接将之解释为安卓开发所用的单位dp,我认为这是...

    arcticfox
  • Flutter 大小单位详解

    关于Flutter 大小所使用的单位,官方文档没有给出非常明确的解释,因此一直存在模糊的说法,许多从事安卓开发者直接将之解释为安卓开发所用的单位dp,我认为这是...

    arcticfox
  • 数据库 ID 生成方案:号段模式

    还可以使用号段的方式来获取自增 ID,号段可以理解成批量获取。比如从数据库获取 ID 时,就可以批量获取多个 ID 并缓存在本地,提升效率。

    happyJared
  • 【Go 语言社区】HTML5 canvas验证码识别

    canvas 的历史这个 HTML 元素是为了客户端矢量图形而设计的。它自己没有行为,但却把一个绘图 API 展现给客户端 JavaScript 以使脚本能够把...

    李海彬
  • 【怕啥弄啥系列】Canvas - 基础图形绘制

    HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.

    神仙朱

扫码关注云+社区

领取腾讯云代金券