Mysql5.5 大量数据插入出现的抖动问题 及 解决方法
2013-02-21 17:19
721 查看
背景
日志型应用的一个典型操作,是周期性地有大量的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命令支持预扩展
http://bugs.mysql.com/bug.php?id=63858
效果如图
转自: http://dinglin.iteye.com/blog/1317874
日志型应用的一个典型操作,是周期性地有大量的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命令支持预扩展
http://bugs.mysql.com/bug.php?id=63858
效果如图
转自: http://dinglin.iteye.com/blog/1317874
相关文章推荐
- mysql插入大量数据(text类型)时出现MySQL Server has gone away 的解决方法
- JSP MySQL插入数据时出现中文乱码问题的解决方法
- JSP MySQL插入数据时出现中文乱码问题的解决方法
- C++操作MySQL大量数据插入效率低下的解决方法
- 解决mysql百万数据插入,mysql出现 Mysql Server has gone way问题
- 导入大量数据时出现MySQL Server has gone away 的解决方法
- 解决 C++ 操作 MySQL 大量数据插入效率低下问题
- PHP插入数据到Mysql出现乱码的解决方法
- 关于easyui datagrid 大量数据加载时 出现假死问题的解决方法
- mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
- mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
- mysql问题之slow log中出现大量的binlog dump记录的解决方法
- java向mysql插入数据乱码问题的解决方法
- mysql问题之slow log中出现大量的binlog dump记录的解决方法
- MySQL数据库 查询表数据出现中文乱码 及 插入中文报错Incorrect string value问题解决方法
- mysql 5 插入数据有不识别字符问题 解决方法
- MySQL插入数据时,中文乱码问题解决方法
- mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
- myeclispe中向mysql中插入中文数据出现??问题解决办法