• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Mysql5.5 大量数据插入出现的抖动有关问题 及 解决办法

mysql 搞代码 7年前 (2018-06-06) 129次浏览 已收录 0个评论

mysql5.5 大量数据插入出现的抖动问题 及 解决方法

背景

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

分析

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

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

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

Mysql5.5 大量数据插入出现的抖动有关问题 及 解决办法

 

改进方案及可行性

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

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

工具验证

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

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

后续

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

补充更新

新增MySQL命令支持预扩展

http://bugs.mysql.com/bug.php?id=63858

效果如图

Mysql5.5 大量数据插入出现的抖动有关问题 及 解决办法

转自: http://dinglin.iteye.com/blog/1317874


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Mysql5.5 大量数据插入出现的抖动有关问题 及 解决办法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址