在我的服务器上,将记录插入MySQL DB非常慢。关于服务器状态,每秒InnoDB写入大约20。
我不是专家,只是从大学毕业。我没有太多的经验。我怎样才能提高InnoDB写入的速度?如果不升级我的服务器的硬件,有什么办法可以做到吗?
我的服务器不好,所以我安装了Microsoft Windows Server 2003 R2。硬件信息如下:
有任何意见,谢谢。
这里有一套很好的提示:
缓冲池经常需要调优,但它对于读取和写入都是通用的。调整每秒写入次数,您还应该注意:
一些提示:
此外,如果您能向我们展示您确切的数据库结构以及您正在使用的确切INSERT语句,将会很有帮助。
请将innodb_buffer_pool_size设置为512M。它可能会提高性能
SET GLOBAL innodb_buffer_pool_size = 512M
建议可能因您的实施而异。以下是直接从MySQL文档中复制的一些注释:
批量数据加载提示
将数据导入InnoDB时,请确保MySQL没有启用自动提交模式,因为每次插入都需要将日志刷新到磁盘。要在导入操作期间禁用自动提交,请使用SET autocommit和COMMIT语句将其包围。
如果需要插入多行,请使用多行INSERT语法来减少客户端和服务器之间的通信开销:
插入可用的值(1,2),(5,5),......;
如果您正在进行大量批量插入,请尝试避免插入后面的“从last_insert_id中选择”,因为它会严重减慢插入速度(按照插入13小时插入6分钟的顺序)如果需要数字另一个插入(也许是一个子表)将你自己的数字分配给id(这显然只有在你确定没有其他人同时进行插入时才有效)。
如前所述,您可以增加InnoDB缓冲池(innodb_buffer_pool_size变量)的大小。这通常是一个好主意,因为默认大小非常小,大多数系统可以为池提供更多内存。这将提高大多数查询的速度,尤其是SELECT(因为更多记录将保留在查询之间的缓冲区中)。插入缓冲区也是缓冲池的一部分,它将存储最近插入的记录,如果您将来的插入基于先前插入的值,这将提高速度。希望这可以帮助 :)
如果使用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