在处理更大的表(> 50k记录,每个表总共大约100MB)时,优化MySQL安装以获得最佳性能的最佳做法是什么?我们目前正在考虑重写DelphiFeeds.com(Delphi编程社区的新闻站点)并注意到简单的Update语句可能需要50ms。这似乎很多。是否有任何我们应该启用/设置的配置设置通常在标准MySQL安装上禁用(例如,利用更多RAM来缓存查询和数据等等)?
此外,存储引擎的选择对性能有何影响?我们计划使用InnoDB,但如果出于性能原因推荐使用MyISAM,我们可能会使用MyISAM。
答案 0 :(得分:16)
“最佳实践”是:
订阅http://www.mysqlperformanceblog.com的RSS Feed,并阅读其历史文章。对于与绩效相关的智慧而言,这是一个非常有用的资源。例如,您询问了InnoDB与MyISAM的关系。他们的结论是:InnoDB的性能平均比MyISAM高约30%。虽然也有一些使用场景MyISAM胜过InnoDB。
该博客的作者也是@Andrew Barnett提到的“高性能MySQL”的合着者。
来自@ʞɔıu的评论:如何判断你是否受I / O限制而不是CPU绑定与内存绑定是平台相关的。操作系统可能提供ps,iostat,vmstat或top等工具。或者,如果您的操作系统没有提供第三方工具,您可能需要获得第三方工具。
基本上,无论哪种资源与100%利用/饱和挂钩,都可能是您的瓶颈。如果你的CPU负载很低,但你的硬件的I / O负载达到最大值,那么你就是I / O限制。
然而,这只是一个数据点。补救措施也可能取决于其他因素。例如,复杂的SQL查询可能正在执行文件排序,这会使I / O忙碌。你应该向它投掷更多/更快的硬件,还是应该重新设计查询以避免文件存储?
在StackOverflow帖子中总结的因素太多,而且该主题上存在的许多书籍支持这一点。保持数据库有效运作并充分利用资源是一项需要专业技能和不断学习的全职工作。
杰夫阿特伍德刚写了一篇关于在系统中发现瓶颈的好文章:
答案 1 :(得分:7)
从O'Reilly购买“高性能MySQL”。这个主题差不多有700页,所以我怀疑你会在SO上找到一个简洁的答案。
答案 2 :(得分:5)
很难广泛宣传,但可以采用适度的高级视角。
innodb_flush_log_at_trx_commit
更改为1,以便通过MyISAM获得性能。INSERT DELAYED
也很有用),但是有一个批处理过程可以将MySQL内的更新从那里移到所有读取的地方。这有各种变化。UPDATE
发生的很长时间实际上可能非常微不足道。 答案 3 :(得分:4)
之前已经讨论过许多最佳实践,因此没有理由重复这些实践。对于实际的具体建议,我会尝试运行MySQL Tuner。它是一个perl脚本,您可以下载然后在您的数据库服务器上运行,它将为您提供一堆关于数据库执行情况的统计信息(例如缓存命中)以及需要调整哪些问题或配置参数的一些具体建议提高性能。
虽然这些统计数据在MySQL本身都可用,但我发现这个工具以更容易理解的方式提供它们。虽然重要的是要注意YMMV与建议的关系,但我发现它们通常非常准确。只需确保您事先通过实际流量完成了数据库的操作。