我们正在运行 LAMP 堆栈(Perl、MySQL),最近由于使用量的增加和用户行为的变化,数据库负载大约增加了三倍......这导致我们的系统超负荷。
使用相当标准的三层架构,大量的网络服务器(似乎不是问题),一些专用服务器(不思考这是问题所在)以及现代 Sun 硬件上带有大量(72GB)内存的相当大的 MySQL 数据库(DB 似乎是当前的瓶颈)。
我猜有两个问题:
1) 有谁知道有哪些资源可以帮助我们解决负载问题?购买硬件肯定是可行的;配置更改也是如此……
2) 有谁有大规模扩展 LAMP 堆栈的经验,并且有兴趣从事付费咨询工作?我们急需一个人,最好愿意前往北卡罗来纳州罗利市现场提供帮助……第一个目标是摆脱当前的危机;第二个目标是帮助规划未来 2 年内再增加 10 倍的使用量。
(作为问题 2 的子问题:您会去哪里寻找这样的顾问???)
提前致谢!-史蒂夫
答案1
好消息是,如果是数据库问题,那么许多类型的数据库工作实际上都可以通过远程连接有效地完成。如果您能够快速设置进入服务器集群的 VPN 以及远程 SSH/终端帐户,那么您的顾问范围就会迅速扩大。
我从未与佩科纳我自己,但是他们的 MySQL 可扩展性 + 性能书确实很棒,以及他们在 Maatkit 上的工作。其他回馈社区的顾问包括Jeremy Cole @ Proven Scaling和开放查询团队。
答案2
购买硬件肯定是可行的;配置更改也是如此……
在我的候选列表中,这两个是 #2 和 #3,#1 是数据库设计。通常,当数据库负载突然膨胀而使用量没有相应增长时,某个地方就会出现 O(n^m) 问题。连接中的全表扫描、低效的非规范化、n+1 故障、插入数据时可能出现的锁争用等。解决方案可以简单到添加一些精心挑选的索引,也可以复杂到重新设计数据模型。
我多年没用过 MySQL 了,但我记得:你可以让它记录所有请求及其执行时间。你应该查看该日志并找出导致数据库成为瓶颈的确切原因。