我正在与一个小团队合作,运行一个运行PHP 5.3.9,MySQL 5.0.77的内部网站。所有文件和数据库都托管在具有以下配置的专用Linux计算机上:
Intel Xeon E5450 8 CPU内核@ 3.00GHz, 2992.498 MHz, 缓存6148 KB, Cent OS - 红帽企业Linux服务器版本5.4
我们从小规模开始,然后数据库变得更大,现在网站性能显着下降。我们经常得到服务器空间溢出,mysql超载太多调用等等。我们没有太多处理这些问题的经验。我们最近有另一台服务器,我们正在考虑用它来提高性能。由于它具有更好的配置,我们中的一些人希望将所有内容完全移动到新机器上。但我试图找出如何利用这两台机器来优化性能。我找到了诸如MySQL集群,负载均衡器等选项。我想知道我是否可以对这种情况“如何在短期内利用两台机器以获得最佳性能”提出任何建议,这将是非常好的。从短期来看,我们正在寻找能在一个月左右部署的东西。
提前感谢您的时间。
答案 0 :(得分:3)
让网站在具有某种负载平衡的两台服务器上运行比你想象的更难......
我解决这个问题的方法是让团队成员调查与数据库相关的问题,比如SLOW QUERIES(MySQL可以配置为记录任何需要花费更多时间才能完成的查询),然后检查原因(使用MySQL EXPLAIN)。很少有索引可以修复关键的失败点,让您有时间提出可靠的长期解决方案。如果数据库的优化程度非常低,那么现在甚至可以免除其他任何需要!
您可以将MySQL移动到同一网络中的另一台计算机,这样您就可以将Web服务器负载与数据库负载分开。
考虑缓存数据的某些部分,这些部分不会经常更改,但会在网站上的每个请求中加载。 Memcached,redis缓存,文件缓存,任何事情都可以。
另一个短期解决方案(和开发人员相比便宜)将用SSD替换硬盘,特别是如果您有查询磁盘必须经常搜索的话。根据我的个人经历,这可能会产生巨大的变化。
答案 1 :(得分:1)
您正在使用2009年1月发布的MySQL 5.0.77 .MySQL的性能和可伸缩性已经有了很大的改进。您应该升级到当前版本,在撰写本文时为5.5.28。仅此一项就可以为您带来很多性能提升。
您应该分析您的查询以确保您拥有精心挑选的索引。这是提高绩效的关键步骤。有关如何执行此操作的一些提示,请参阅我的演示文稿How to Design Indexes, Really。
在现代版本的MySQL中,InnoDB几乎总是比MyISAM更好的存储引擎选择。总是测试以确保,因为有一些边缘情况MyISAM可能仍然运行得更快。虽然InnoDB有更多的调整参数,但设置它们很重要,因为默认值太低而不能提供良好的性能。您可以在我的演示文稿MySQL 5.5 Guide to InnoDB Status中了解InnoDB的配置参数。
您应该将数据库放在专用服务器上,与您的应用程序分开。对性能的最佳单一改进通常会增加您用于innodb_buffer_pool_size
的内存量(假设您使用InnoDB存储引擎)。
正如@Veseliq建议的那样,升级到数据目录的SSD驱动器是提高性能的好方法。
配置MySQL tmpdir
以使用您的SSD驱动器。
如果你无法获得SSD驱动器,那么下一个最好的事情就是带有回写缓存的RAID控制器。
设置MySQL配置skip_name_resolve
以消除应用程序连接时对DNS反向查找的依赖性。如果执行此操作,则需要按IP地址而不是主机名授予SQL权限。
各种其他Linux调优改进:
答案 2 :(得分:0)
最简单的第一步是将数据库和前端应用程序进程分开,将它们放在不同的计算机上。这通常可以通过修改mysqld
设置为my.cnf
进程分配更多内存。
与往常一样,更新到最新版本的堆栈和后端,以确保您最大限度地利用硬件。
密切关注系统上运行的数据库调用,看看是否有办法加速这些调用。作为示例,EXAMINE
通常可以显示任何给定SELECT
调用的执行策略,并将显示缺少索引的位置,通常是所有内容的最大性能拖累。如果你被“桌面扫描”或“使用filesort”击中,那么你在大型数据集中基本上已经死了。您需要索引或不同的架构。
第二步是在更多前端应用程序服务器中进行分层,并添加某种负载均衡器。这为您提供了额外的前端容量,可以更好地处理负载,同时还可以加载数据库。
第三步是确保在JOIN
来电期间您没有执行任何不必要的SELECT
操作。仔细检查数据库中您需要的内容,并尝试一次从一个表中获取所有内容。战术反规范化通常是这里的解决方案,但如果你不小心这样做就会出现同步问题。当你这样做时要特别注意,并确保你有广泛的测试覆盖率。
第四步通常是使用像Memcached之类的缓存来缓冲数据库上繁重的读取活动,以避免频繁访问数据库。请记住,最快的数据库调用是您未进行的调用。
没有灵丹妙药,但如果你按照这个顺序做事,你应该有一个战斗机会。