2011-05-16 54 views
0

目前我们有一个数据库和一个脚本,它有2个更新和1个选择,1个插入。在Mysql中持续更新/插入存在性能问题

问题是我们有两万人每小时运行一次这个脚本。这导致mysql以100%cpu运行。

对于插入,它是用于日志记录的,我们希望将所有数据记录到我们的mysql中,但是随着表的增大,应用程序变得越来越慢。 我们在InnoDB上运行,但有人说它应该是MyISAM。我们应该使用什么?在这个日志表中,我们有时候会抽出日志用于统计目的。只有40-> 50次。

我们的解决方案是使用Gearman [http://gearman.org/]延迟插入数据库。但是更新如何?

我们需要更新2表,1从客户更新余额(balance = balance -1),另一个是更新另一个表的计数。

我们应该如何让这个更快,更高的CPU效率?

谢谢

回答

0

而是作为表扩展,应用程序变得越来越慢

这通常意味着你在什么地方丢失的索引。

MyISAM不好:除了不符合ACID标准外,它还会锁定整个表以执行插入 - 这会导致并发性。

0

仔细阅读MySQL文档:

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

特别 “的innodb_flush_log_at_trx_commit” - http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html

我会远离的MyISAM远,因为它混合SELECT时有并发问题和INSERT语句。如果你可以保持你的插入表足够小,以留在记忆中,他们会更快。在交易中批量更新也会帮助他们更快地完成工作。建立测试环境并调整您的实际工作很重要。

您可能还想查看分区来旋转日志。你会丢弃旧分区,并为当前数据创建一个新分区。这比删除旧行快得多。