背景

日志型应用的一个典型操作,是周期性地有大量的insert操作。这类操作需要对扩展表空间。

分析

在InnoDB里,扩展表空间的操作是在语句执行过程中,由执行线程直接调用的。

尤其是对于一些表每行比较大,则会出现每插入几条记录就需要扩展表空间。

虽然有insert buffer和write ahead logging策略保证在执行线程中不直接操作表数据文件,但扩展表空间的操作会导致更新的tps出现瞬间低点。现象如下图。实际上整体TPS也受此影响。

改进方案及可行性

可以在这类大操作之前预分配表空间来优化这个问题。我们的业务上线之前都有容量预估,每天也有监控。因此接下来一段时间表空间增长到多少,是能够预估得到。

在实际更新开始之前,在低峰期甚至是提供服务之前就将表空间预分配好,能够避免这种抖动和提高TPS。

工具验证

InnoDB的表空间结构上,空间头部有4个byte的数字N表示这个表空间的大小(page数目),文件的实际大小是N*Page_SIZE.

实现了一个工具extend_space,修改4个byte并将文件append到指定的大小。测试发现insert性能提升10%。由这个原因引起的抖动消除。

后续

目前还只是用工具实现。工具使用起来比较麻烦,主要是更新过程中的锁表操作就需要外部脚本,而且以后应用的新版本中page_size可变,因此比较优美的方案是将这个功能加入到MySQL支持的命令中。

补充更新

新增MySQL命令支持预扩展

效果如图

mysql整点抖动_MySQL 5.5 大量数据插入出现的抖动问题 及 解决方法相关推荐

  1. mysql workbench 监控_mysql 使用workbench工具,表状态为read only的解决方法

    解决方法: MySQL中数据库表中如果没有设置primary key,在workbench中,无法直接编辑数据,必须设置PK和NN. 拓展: - PK: primary key (column is ...

  2. mysql删除数据后id自增不连续的解决方法

    mysql删除数据后id自增不连续的解决方法 参考文章: (1)mysql删除数据后id自增不连续的解决方法 (2)https://www.cnblogs.com/weifeng-888/p/1163 ...

  3. SqlYong连接MySql数据时,出现错误代码2003的解决方法

    问题描述: 在我刚刚安装完SqlYong后,准备用SqlYong连接MySql数据时,出现错误代码2003. 解决方法: MySql没有开始,只需要启动MySql即可. (我的电脑右键-管理-服务  ...

  4. Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法

    Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法 参考文章: (1)Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法 (2)http ...

  5. 注册表编辑器厘米爱你找不到mysql,win7系统中安装mysql后找不到服务或出现找不到指定文件的解决方法...

    最近有用户到本站反馈说碰到这样一个情况,就是在电脑中安装mysql后,出现找不到服务或出现找不到指定文件的情况,碰到这样的问题该怎么办呢,接下来给大家讲解一下 1.如果你是5.0的版本,先用cmd进入 ...

  6. mysql插入报主键冲突,解决方法主键索引重新排序

    mysql插入报主键冲突,解决方法主键索引重新排序 参考文章: (1)mysql插入报主键冲突,解决方法主键索引重新排序 (2)https://www.cnblogs.com/nizuimeiabc1 ...

  7. MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法

    MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法 参考文章: (1)MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法 (2)https://www.cnblogs.com/tiny ...

  8. 连接mysql报错:Access denied for user ‘root’@‘localhost’(using password: YES)的解决方法

    连接mysql报错:Access denied for user 'root'@'localhost'(using password: YES)的解决方法 参考文章: (1)连接mysql报错:Acc ...

  9. oracle数据库中批量把一张表里面的数据插入到不同的表中的方法

    oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into) 准备环境 1.oracle数据库自带的scott下的用户表 ...

最新文章

  1. codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】
  2. nginx负载均衡集群
  3. JS中全局对象的属性和方法
  4. 分布式文件系统(HDFS)与 linux系统文件系统 对比
  5. 内核链表list.h文件剖析
  6. 在Ubuntu 16.04下安装nodejs
  7. C++算法学习(力扣:134. 加油站)
  8. snipaste怎么滚动截长图_还在用老方法截长图?分享iPhone滚动截屏方法,无需拼接1秒出图...
  9. UI设计师应聘面试攻略看这篇就够了
  10. 面试官问我new Vue阶段做了什么?
  11. mysql 1593_Linux中MySQL主从复制中出现1593错误码的低级错误
  12. Markdown Day01
  13. java 构造方法能被继承吗_Java中构造函数可以被继承么
  14. RSA非对称加密传输---前端加密解密(VUE项目)
  15. Linux基础命令----tail 查看文件尾部内容
  16. 如何查看自己加入过的微信群
  17. WebRTC系列 -- iOS ADM音频数据流处理流程及源码阅读记录
  18. IE上在线浏览PDF
  19. Nestjs框架快速入门之项目搭建与小试牛刀
  20. 3、IQ采样【入门软件无线电(SDR)】PySDR:使用 Python 的 SDR 和 DSP 指南

热门文章

  1. rar 文件头crc版本_php实现rar文件的读取和解压
  2. 用javascript实现以下功能!_模电小实验:用三极管实现触摸开关功能
  3. wps重复上一步快捷键_WPS表格怎么快速输入重复内容?快速输入重复内容的详细步骤...
  4. python建立字典读取键和值_在Python字典中动态创建键和值
  5. 用php程序能消除水印吗,php——水印
  6. 四、从Excel开始,学习Excel的快捷键
  7. 北极约200万个甲烷点被发现,人类的反思该提上日程了,因为只有一个地球
  8. 中绘制折线_啥是折线图?啥时候用?怎么用呢?这里全都有,满足你的味蕾
  9. 浅谈NLP中的对抗训练方式
  10. 40万总奖金!顶级云服务免费用!2021全球高性能云计算创新大赛报名中!