在我的服务器上,将记录插入MySQL DB非常慢。关于服务器状态,每秒InnoDB写入大约是20。
我不是专家,只是从大学毕业。我没有太多的经验。 我怎样才能提高InnoDB写入的速度?如果不升级我的服务器的硬件,有什么办法可以做到吗?
我的服务器不好,所以我安装了Microsoft Windows Server 2003 R2。硬件信息如下:
任何评论,谢谢。
答案 0 :(得分:5)
这里有一套很好的提示:
缓冲池经常需要调优,但它对于读取和写入都是通用的。调整每秒写入次数,您还应该注意:
答案 1 :(得分:1)
一些提示:
此外,如果您能向我们展示您确切的数据库结构以及您正在使用的确切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