MySQL“插入” 生产环境和本地环境速度差距太大!

发布于 2024-07-26 22:08:51 字数 432 浏览 4 评论 0原文

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

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

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

提前致谢!

I have installed MySQL 5.1x instance on a Linux machine (768MB RAM). I restored a backup of about 1000 rows and through my .NET application (deployed on a different Windows webserver) I performed certain read operations, which, when considering that the table had no indexes, were fast.

I then cleared the server from these rows and used a feature in my web application on the other server to insert rows (Basically, I read text off a text file, entering the data into fields of a custom class, and then calling a stored procedure with these parameters for each record). When I had the website and database both on my local machine, I would insert 2500 rows instantly (less than a second). Now, however, in the "production" environment, these same 2500 rows are taking 10 minutes to be inserted. I am using the default my.cnf that comes with the installation of MySQL.

Is there any way I can optimise writes without compromising the speed of read operations? Or am I missing something obvious?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

韬韬不绝 2024-08-02 22:08:51

您是否看过MySQL 手册页了解插入速度? 我想到的第一个猜测是您没有将 2500 个过程包装在 Begin Transaction/Commit 语句,因此 MySQL 会自动提交 2500 个操作中的每一个操作。

Have you looked at the MySQL manual page for insert speed? The first guess that comes to mind for me is that you aren't wrapping the set of 2500 procedures in a Begin Transaction/Commit statement, so MySQL is autocommitting each one of the 2500 actions.

滥情稳全场 2024-08-02 22:08:51

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

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

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

不幸的是,我无法告诉您如何在 .NET 世界中进行这些批量更新,在 Java 中您可以使用 PreparedStatement.addBatch()。 我确信 .NET 中也有类似的东西。

In addition to the problem mentioned by Mark (auto-commit instead of transaction), I'd definitely investigate using batch updates. Because one major difference between a local connection and a network connection (even a very fast one) is roundtrip time.

While the bandwidth is most likely not the limiting factor in this case, doing 2500 network roundtrips to the database and back will definitely take a lot longer on a network than on the local machine.

Using a batch update can reduce those inserts to a single roundtrip ideally and just a few ones in practice.

Unfortunately I can't tell you how to do those batch updates in the .NET world, in Java you'd use PreparedStatement.addBatch(). I'm sure there's something similar in .NET.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文