MySQL:平均每秒支持多少UPDATES?

时间:2012-10-11 11:34:22

标签: mysql sql database performance sql-update

我们对单个MySQL表(存储用户活动信息)进行了简单的更新。假设我们每秒将这些分组更新为批量更新。

我想要了解一个典型的4核8GB盒子上的mysql什么时候开始出现问题,以及每秒钟的更新。例如。我每秒能获得多少行更新?

这是一个思考练习,决定我是否应该在我们的应用程序发布的早期(简化开发)中使用MySQL,或者如果MySQL很快就会爆炸,以至于不值得冒险沿着这条路走下去。

3 个答案:

答案 0 :(得分:5)

获得体面数字的唯一方法是通过对特定用例进行基准测试。变量太多了,没有办法解决这个问题。

如果您只是点击一个bash脚本或一个小型演示应用并用jmeter敲击它,那么它不应该花太长时间,那么这可以给你一个好主意。

我在尝试对类似的用例进行基准测试时使用了jmeter。不同之处在于我正在寻找INSERTS个数的写入吞吐量。我玩的时候最有用的东西是'innodb_flush_log_at_trx_commit'参数。如果您使用INNODB 不需要 ACID合规性,请将其更改为0.这会对{{1吞吐量并且可能会在INSERT用例中执行相同的操作。虽然请注意,使用此设置,更改只会每秒刷新一次磁盘,因此如果您的服务器断电或其他什么,您可能会丢失一秒钟的数据。

在我的四核8GB机器上用于我的用例:

  • UPDATE每秒产生80个INSERTS
  • innodb_flush_log_at_trx_commit=1每秒产生2000个INSERTS

这些数字可能与您的用例无关 - 这就是您需要自己进行基准测试的原因。

答案 1 :(得分:2)

对这个问题给出一般答案并不容易。您要求的数字不仅严重依赖于数据库服务器的硬件,MySQL本身,还依赖于服务器/客户端配置,网络以及同样重要的数据/表设计。

一般来说,在最先进的服务器上使用裸设置MySQL并使用唯一密钥更新语句,如果我从{{1}触发它,我就不会遇到200更新语句的问题。至少那是我在我六岁的winxp测试环境中获得的。新系统上的裸装置将以更高的方式扩展。如果你认为更大,一台服务器是不可能的。 MySQL在某些方面可以是tweakedscaled out,因此很多公司都非常依赖它。

只是一些基础知识:

  • 如果要更新的字段包含大量索引文件,则更新 语句很慢,因为每个语句不仅要写 数据,还有索引信息。
  • 如果您的更新声明不能 使用索引,服务器可能需要更长的时间来分配 必须更新的必填字段。
  • 慢速内存和/或慢速硬盘 也可能会降低整体服务器性能。
  • 网络慢 连接减慢了客户端和服务器之间的通信。

There are whole books written about it,如果你有兴趣,我会停在这里并建议进一步阅读!

答案 2 :(得分:2)

很多都取决于您用于推送到数据库的代码的质量。

如果您编写批处理以按INSERT请求插入单个值(即

INSERT INTO table (field) VALUES (value_1);
INSERT INTO table (field) VALUES (value_2);
...
INSERT INTO table (field) VALUES (value_n);

,你的表现会崩溃并燃烧。

如果使用单个INSERT插入多个值(即

INSERT INTO table (field) values (value_1),(value_2)...(value_n);

,你会发现你可以轻松地每秒插入许多记录

作为一个例子,我编写了一个快速应用程序,需要将LDAP帐户请求的详细信息添加到保留数据库。一次插入一个字段(即LDAP_field, LDAP_value),整个脚本的执行需要10秒。当我将值连接到单个INSERT请求时,脚本的执行时间从开始到结束都下降到大约2秒。这包括启动和提交交易的开销

希望这有帮助