如何从单一服务器设置增长

Jon*_*n M 8 mysql php performance scale

我正在寻找有关如何扩展服务器设置的资源。

我们目前在英国有一台 Rackspace 专用服务器,其规格如下:

HPDL385_G2_PrevGen
HP 单双核 Opteron 2214 (2.2Ghz)
4GB RAM
RAID 1 中的 2x 10,000 SCSI 驱动器

我们每月的流量高达 550,000 个 UV。

该站点运行 PHP 和 MySQL 设置。数据库受到了绝对的打击,我们有许多复杂的查询加入 multilpe 表。

我们正在使用 APC 进行 PHP 缓存。

我已经到了尽可能多地进行数据库和查询优化的阶段,并想知道下一步应该是什么......

我看过memcache,但我的印象是他需要大量的RAM,最好是一个专用的盒子......

下一步就是拥有两个盒子;一个用于数据库,一个用于 Apache?或者有没有我忽略的步骤。

我们的负载通常在 2 标记左右,但现在它高达 20!

穆宁的一些图表:

mysql 中央处理器 记忆

Mar*_*rkR 3

购买一些硬件,但将其放在测试实验室而不是数据中心。然后在各种硬件/软件组合上对您的应用程序进行压力测试,直到找到一种合理的组合来满足您的需求。

当然,您需要设计一些可以针对运行应用程序测试副本的类似生产数据库创建虚假流量的东西。但谁说这会很容易。

如果你不这样做,只是在生产中做一些事情,你不知道它是否会起作用,并且你可能花费了大量的工程工作来实现诸如缓存之类的东西(这将带来它们的公平份额)错误!)在一些没有帮助的事情上。

测试、测试、再测试。在获得良好的性能数据表明它可能会显着改善问题之前,不要将硬件/软件更改投入生产。工程工作是昂贵的,但测试硬件却不是(尤其是)。


Memcached 只是一种选择,在数据库缓存达到最佳状态之前,您可能不需要考虑它。这意味着将其放在具有合理 RAM 量(不是 4G - 现在的笔记本电脑都有 RAM;32G 绝对实惠)的专用(当然是 64 位)盒子上,并进行适当调整。

你没有提到你的数据库有多大,但如果它完全可行,你会想要尝试将它完全放在内存中(或者至少是热门位)。将数据库完全放在 RAM 中将使读取 IO 操作完全消失,从而不再成为瓶颈。

分析您的数据库查询。有一些工具可以用来执行此操作 - 您应该能够在测试环境中模拟生产负载。诀窍是避免缓慢的查询并确保频繁执行的查询速度快。

如果您的性能问题与 IO 同步相关,因为您只是为数据库执行了太多事务,请确保您使用的是运行正常的电池支持的 raid 控制器(与您的供应商讨论这些问题)。它们比非电池支持的设备提供更多的 IO 写入操作(因为数据只需要在操作系统得到确认之前到达缓存)。或者,如果您的数据不太重要,请考虑放宽数据库的持久性参数(提交时 innodb 同步)。