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

问题描述 投票:4回答:5

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

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

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

  • CPU:Intel Xeon E5649 2.53GHZ
  • 内存:2GB

有任何意见,谢谢。

mysql sql performance
5个回答
5
投票

这里有一套很好的提示:

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

  • innodb_log_file_size
  • 的innodb_flush_log_at_trx_commit
  • innodb_flush_method
  • log_bin和sync_binlog

1
投票

一些提示:

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

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


0
投票

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

SET GLOBAL innodb_buffer_pool_size = 512M


0
投票

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

批量数据加载提示

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

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

插入可用的值(1,2),(5,5),......;

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.