(我正在使用谷歌翻译)。
目前正在开发一个车辆系统(30,000辆汽车,10 000名用户),在此期间仅在当地环境中进行了测试。
问题来了:当我发送到云服务器时,mysql 现在消耗了 100 ~ 140% 的处理,使其站点下降大约 5 ~ 30 分钟。
我不知道如何解决这个问题,以便我无法识别他,因为在那之前一切都在本地主机上。
我的问题就是:使用 CakePHP 应用程序,系统如何过载到一定程度?
有关表的一些基本信息:
客户 ->合同 ->计划 ->广告
广告 ->(车辆、零件、服务)
车辆 ->(品牌、型号、版本、类别、颜色、燃料)
横幅 ->横幅频道 ->本地横幅
有关应用程序的信息:
调试: 0启用缓存(每页 10-1 小时 *)
和 MySQL(超过 250 个表)运行繁重应用程序的经验,瓶颈在于对 CakePHP ORM 的不当使用。
有时,您将获取比您需要的多得多的数据。
find('all')
与高recursive
值相关的功能看起来很酷,并加快了开发时间。
但事实上,这可能真的很糟糕,尤其是当您的应用程序和数据库正在增长时。关联模型的数量也将增长,递归获取越来越多的数据。
一个好的做法是始终指定所需的字段。此外,对于精彩查询,应取消绑定不需要的关联模型。
对于复杂查询,请不要犹豫,使用 query()
函数手动编写优化的查询。
在开发中,您应该启用 CakePHP 调试模式来分析 Config/core.php
文件中的 SQL 查询:Configure::write('debug', 2);
这将帮助您找到最慢的。
优化查询是第一步。如果这不能解决您的问题,则您的数据库可能设计得不好。
此外,您应该在生产中使用操作码缓存,例如 APC 或 XCache。
如果你真的想知道为什么它太慢了,那就这样做,
- 装备 Apache JMeter 来生成负载
- 通过 xdebug 启用分析 Web 应用程序
- 也分析您的 Web 服务器。
如果您想快速阅读在高负载站点中使用 PHP 的策略
Matt Curry的这本书可能会有所帮助:
http://www.pseudocoder.com/Super_Awesome_Advanced_CakePHP_Tips.pdf
@ 第 54 页 -> "快速制作您的蛋糕应用程序"