MySQL也能并发导入数据

作者:叶金荣 来源:asp之家 时间:2010-03-25 10:38:00 

对MySQL的用户而言,备受诟病的一个问题就是导入SQL备份文件时不能并发,使得导入的效率很低。

今天,我们就来改变下思路,尝试一下并发导入的方法,供大家参考。

1、问题分析

想要实现并发导入,其实没那么难,最简单的思路就是:将完整的文件切分成多份,然后并发导入即可。

在这里,我自己的做法是这样的:

1) 首先,假设只有一个库;多个库的情况也是类似,无非就是循环

2) 计算SQL文件总行数

3) 计算SQL文件总大小

4) 设定每个切分文件最大尺寸

5) 初始化表结构

6) 循环处理SQL,按照切分文件最大尺寸切分成多个小文件

7) 并发导入多个小文件

上述方法中,如果数据表是 MyISAM 表,则并发导入没有问题,但如果是 InnoDB 表,则会有表级锁 AUOT-INC 导致并发效率不高的麻烦,尽管如此,那也比单个文件串行导入来的快一些。想要避免这个麻烦,就得采用 MySQL 5.1 版本了,因为在 5.1 中,改进了 AUTO-INC 的处理方式,规避了表级锁,很大程度提高了并发效率。

2、实际测试

事先设定:最大并大导入线程是16个。

2.1 MySQL 5.0.67 版本

innodb_flush_log_at_trx_commit = 1

串行导入:01:51:34

并行导入:01:25:05

innodb_flush_log_at_trx_commit = 0

串行导入:01:49:36

并行导入:01:11:29

2.2 MySQL 5.1版本

innodb_flush_log_at_trx_commit = 1, innodb_autoinc_lock_mode = 0

串行导入:01:52:28

并行导入:01:38:13

innodb_flush_log_at_trx_commit = 1, innodb_autoinc_lock_mode = 1

串行导入:01:54:55

并行导入:01:26:24

innodb_autoinc_lock_mode = 0

并行导入:01:38:13

innodb_autoinc_lock_mode = 1

并行导入:01:05:51

更加详细的测试就不再做了。

3、小结

从上面的测试结果可以看到,MySQL 5.1在AUTO-INC锁方面的改进还是非常大的,对于想要提升并发性能,同时应用相对不是太复杂,并且不担心会碰到bug的童鞋可以多多尝试下。

由于众所周知的缘故,相关的脚本就不发布了,有需要的童鞋请加入MSN群讨论

作/译者:叶金荣,来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

标签:mysql,导入,数据
0
投稿

猜你喜欢

  • Web表单设计:表单结构

    2011-04-22 12:32:00
  • 使用ACCESS做网络版程序的四种解决方案

    2009-01-14 16:22:00
  • 优化你的ASP程序及优化网页

    2007-10-06 23:02:00
  • 20个Javascript手风琴折叠菜单

    2009-10-12 12:09:00
  • 使用模板实现ASP代码与页面分离

    2008-09-12 16:07:00
  • 给网站界面预留退路

    2009-03-25 20:32:00
  • MySQL命令终端有beep声

    2009-02-26 15:27:00
  • 分享几个字体设计

    2007-10-10 13:53:00
  • windows7下调试ASP+ACCESS错误“未找到提供程序 该程序可能未正确安装”解决办法

    2009-12-26 18:35:00
  • ASP从数据库中获取下载文件

    2007-10-06 21:17:00
  • ASP读取Exif信息无组件实现过程

    2009-02-09 12:52:00
  • asp如何遍历目录及目录下的文件?

    2009-11-11 17:55:00
  • 解决方案,而不是功能

    2011-01-30 18:11:00
  • 下一代web:浏览器存储支持

    2008-06-11 11:50:00
  • 在Oracle中向视图中插入数据的方法

    2009-02-28 10:42:00
  • ASP实现SQL语句日期格式的加减运算

    2008-11-07 15:13:00
  • 解析:轻松了解 MySQL中损坏的MyISAM表

    2009-02-23 17:30:00
  • 得到元素真实的背景颜色的函数

    2008-05-20 12:04:00
  • 系统默认的MySQL用户名消失的解决方法

    2008-12-02 14:26:00
  • 如何处理包含JavaScript语句时的间隔符?

    2009-11-14 20:39:00
  • asp之家 网络编程 m.aspxhome.com