如何提高每秒MySQL数据库的InnoDB写入速度

时间:2013-12-02 16:01:39

标签: mysql sql performance

在我的服务器上,将记录插入MySQL DB非常慢。关于服务器状态,每秒InnoDB写入大约是20。

我不是专家,只是从大学毕业。我没有太多的经验。 我怎样才能提高InnoDB写入的速度?如果不升级我的服务器的硬件,有什么办法可以做到吗?

我的服务器不好,所以我安装了Microsoft Windows Server 2003 R2。硬件信息如下:

  • CPU:Intel Xeon E5649 2.53GHZ
  • RAM:2GB

任何评论,谢谢。

5 个答案:

答案 0 :(得分:5)

这里有一套很好的提示:

缓冲池经常需要调优,但它对于读取和写入都是通用的。调整每秒写入次数,您还应该注意:

  • innodb_log_file_size
  • 的innodb_flush_log_at_trx_commit
  • innodb_flush_method
  • log_bin和sync_binlog

答案 1 :(得分:1)

一些提示:

  • 最小化索引数量 - 索引维护将减少。这显然是对SELECT性能的权衡。
  • 最大化每个事务的INSERT数量 - “持久性价格”将更少(即,在事务的其余部分仍在执行时,可以在后台完成对磁盘的物理写入, if 交易足够长)。一个大型事务通常比许多小事务更快,但这显然取决于您尝试实现的实际逻辑。
  • 将表格移动到更快的存储空间,例如SSD。可以缓存读取,但必须将durable事务物理写入磁盘,因此仅缓存是不够的。

此外,如果您能向我们展示您确切的数据库结构以及您正在使用的确切INSERT语句,将会很有帮助。

答案 2 :(得分:0)

请将innodb_buffer_pool_size设置为512M。它可能会提高性能

SET GLOBAL innodb_buffer_pool_size = 512M

答案 3 :(得分:0)

建议可能因您的实施而异。以下是直接从MySQL文档中复制的一些注释:

  

批量数据加载提示

     

将数据导入InnoDB时,请确保MySQL没有   启用自动提交模式,因为需要将日志刷新到磁盘   每个插页。要在导入操作期间禁用自动提交,   用SET autocommit和COMMIT语句包围它。

     

使用多行INSERT语法来减少通信开销   如果您需要插入许多行,请在客户端和服务器之间进行:

     

插入有价值的值(1,2),(5,5),......;

     

如果您正在进行大量批量插入,请尝试避免“选择”   last_insert_id“在插入之后,因为它严重减慢了   插入(按照将插入6分钟插入13小时的顺序   如果你需要另一个插入的数字(子表格)   也许)将你自己的号码分配给id(这显然只是   如果您确定没有其他人同时进行插入,则可以正常工作。)

如前所述,您可以增加InnoDB缓冲池(innodb_buffer_pool_size变量)的大小。这通常是一个好主意,因为默认大小非常小,大多数系统可以为池提供更多内存。这将提高大多数查询的速度,尤其是SELECT(因为更多记录将保留在查询之间的缓冲区中)。插入缓冲区也是缓冲池的一部分,它将存储最近插入的记录,如果您将来的插入基于先前插入的值,这将提高速度。希望这会有所帮助:)

答案 4 :(得分:0)

如果使用InnoDB引擎+本地磁盘,请尝试使用innodb_flush_method = O_DSYNC进行基准测试。使用O_DSYNC,我们的批量插入(由TRANSACTION包围)得到了改进。

  

调整冲洗方法

     

在GNU / Linux和Unix的某些版本中,将文件刷新到磁盘上   Unix fsync()调用(InnoDB默认使用)和类似   方法非常慢。如果数据库写入性能是一个   问题,使用innodb_flush_method参数集进行基准测试   到O_DSYNC。

https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-diskio.html