我们对单个MySQL表(存储用户活动信息)进行了简单的更新。假设我们每秒将这些分组更新为批量更新。
我想要了解一个典型的4核8GB盒子上的mysql什么时候开始出现问题,以及每秒钟的更新。例如。我每秒能获得多少行更新?
这是一个思考练习,决定我是否应该在我们的应用程序发布的早期(简化开发)中使用MySQL,或者如果MySQL很快就会爆炸,以至于不值得冒险沿着这条路走下去。
答案 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在某些方面可以是tweaked和scaled 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秒。这包括启动和提交交易的开销
希望这有帮助