此外,选择存储引擎会产生哪些性能影响?我们计划使用InnoDB,但如果基于性能原因建议使用MyISAM,则可能使用MyISAM。
“最佳实践”是:
订阅http://www.mysqlperformanceblog.com上的RSS订阅,并阅读历史文章。那是一个非常有用的性能相关智慧资源。例如,您问InnoDB vs. 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帖子中总结太多因素了,许多书籍都支持这一观点。使数据库高效运行并充分利用资源是需要专业技能和不断学习的全职工作。
Jeff Atwood刚刚写了一篇关于如何找到系统瓶颈的好博客文章:
建议购买O'Reilly出版的《高性能MySQL》一书。该书有近700页内容,因此我认为你在SO上很难找到简洁的答案。
总体而言,虽然有些细节需要注意,但是我们可以提供一个中高级别的建议。
innodb_flush_log_at_trx_commit
更改为1,以使性能超过MyISAM。INSERT DELAYED
也可能很有用),但是需要批量处理从该表格到所有读取操作发生的位置的更新。这有一些变化。UPDATE
需要很长时间的操作可能实际上相当微不足道。之前已经讨论了大量关于编程方面的最佳实践,因此没有必要重复它们。实际上,如果您需要具体的建议,我建议运行 MySQL调整器。这是一个perl脚本,您可以下载并在您的数据库服务器上运行,它将为您提供有关数据库性能(例如缓存命中)的一堆统计数据,以及一些具体的建议,以改善性能所需进行的问题或配置参数。
虽然所有这些统计数据都可以在MySQL本身中找到,但我发现这个工具以更易于理解的方式提供了它们。虽然需要注意的是,建议可能因人而异,但我发现它们通常相当准确。只需确保您已经通过真实流量对数据库进行了充分的测试。