MySQL“插入”生产与本地环境之间的速度差异太大了!

时间:2009-07-03 08:10:39

标签: mysql stored-procedures insert performance production

我在Linux机器上安装了MySQL 5.1x实例(768MB RAM)。我恢复了大约1000行的备份,并通过我的.NET应用程序(部署在不同的Windows Web服务器上)执行了某些读取操作,当考虑到表没有索引时,它很快。

然后我从这些行中清除了服务器,并在其他服务器上的Web应用程序中使用了一个功能来插入行(基本上,我从文本文件中读取文本,将数据输入到自定义类的字段中,然后调用每个记录都有这些参数的存储过程。当我在我的本地机器上有网站和数据库时,我会立即插入2500行(不到一秒钟)。然而,现在,在“生产”环境中,这些相同的2500行需要插入10分钟。我正在使用MySQL安装附带的默认my.cnf。

有没有什么办法可以在不影响读取操作速度的情况下优化写入?或者我错过了一些明显的东西?

提前致谢!

2 个答案:

答案 0 :(得分:2)

你看过the MySQL manual page for insert speed了吗?我想到的第一个猜测是你没有在Begin Transaction/Commit语句中包含2500个过程的集合,因此MySQL会自动提交2500个动作中的每一个。

答案 1 :(得分:1)

除了Mark提到的问题(自动提交而不是事务),我肯定会调查使用批量更新。因为本地连接和网络连接(即使是非常快的连接)之间的一个主要区别是往返时间。

虽然在这种情况下带宽很可能不是限制因素,但对网络进行2500次网络往返并返回网络肯定会比在本地计算机上花费更长的时间。

使用批量更新可以在理想情况下将这些插入减少到单个往返,而在实践中只减少一些。

不幸的是,我不能告诉你如何在.NET世界中进行那些批量更新,用Java PreparedStatement.addBatch()。我确信在.NET中有类似的东西。