【问题标题】:Mysql InnoDB Insertion Speed Too Slow?Mysql InnoDB 插入速度太慢?
【发布时间】:2012-08-04 22:18:26
【问题描述】:

我在 Mysql 中有一个 InnoDb 表,它需要非常快速地处理插入(其他一切都可以随心所欲)。该表没有关系或索引一个自动递增的 id 和一个时间戳。

我从多个客户端运行脚本以在分配的时间内插入尽可能多的记录(循环插入)并计算每秒的插入次数。

我平均每秒只能插入 200 次,我需要大约 20000 次。性能不会随着运行脚本的客户端数量或运行脚本的机器而改变。

有什么方法可以加快这些插入的性能吗?

-----编辑--------

感谢您的所有帮助。我无法将任何插入组合在一起,因为当我们启动时,所有插入都将来自多个连接。我最终将该表的引擎切换到 MyISAM,每秒的插入量立即飙升至 40,000。

【问题讨论】:

  • 服务器的硬件是什么(CPU、RAM、磁盘)?它是专用的 MySQL 服务器还是执行其他工作?一个好主意是运行某种基准测试,例如 Percona 的 tpcc-mysql 或一些 OLTP 基准测试,以获得您的系统可以处理的实际结果。

标签: mysql innodb insertion


【解决方案1】:

你使用了哪个主键?

InnoDB 使用聚集索引,因此所有数据的顺序与其主键索引相同。

如果你不使用自增类型的主键,那么每次插入都会产生大量的磁盘操作。它推送所有其他数据并插入新元素。

更多参考,请尝试检查http://dev.mysql.com/doc/refman/5.0/en/innodb-table-and-index.html

【讨论】:

    【解决方案2】:

    首先,在TRANSACTION中执行INSERTs:

    START TRANSACTION;
    
    INSERT ...
    
    COMMIT;
    

    其次,将多行批处理成一个INSERT 语句:

    START TRANSACTION;
    
    INSERT INTO table (only,include,fields,that,need,non_default,values) VALUES
    (1,1,1,1,1,1,1),
    (2,1,1,1,1,1,1),
    (3,1,1,1,1,1,1),
    ...;
    
    COMMIT;
    

    最后,如果输入数据格式正确,您可能会发现 LOAD DATA INFILE 的性能优于 INSERT。

    【讨论】:

      【解决方案3】:

      例如,我建议尝试在一个查询中使用多个插入

      INSERT INTO table 
         (title, description) 
      VALUES 
         ('test1', 'description1'), 
         ('test2', 'description2'), 
         ('test3', 'description3'), 
         ('test4', 'description4')
      

      或尝试使用程序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 1970-01-01
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        • 2015-04-09
        相关资源
        最近更新 更多