大站点中的 CakePHP(1000 个用户/小时 - 84 个表) - 为什么这么慢


CakePHP in Big Site (1000 users/hour - 84 tables) - Why so slow?

(我正在使用谷歌翻译)。

目前正在开发一个车辆系统(30,000辆汽车,10 000名用户),在此期间仅在当地环境中进行了测试。

问题来了:当我发送到云服务器时,mysql 现在消耗了 100 ~ 140% 的处理,使其站点下降大约 5 ~ 30 分钟。

我不知道如何解决这个问题,以便我无法识别他,因为在那之前一切都在本地主机上。

我的问题就是:使用 CakePHP 应用程序,系统如何过载到一定程度?

有关表的一些基本信息:

客户 ->合同 ->计划 ->广告

广告 ->(车辆、零件、服务)

车辆 ->(品牌、型号、版本、类别、颜色、燃料)

横幅 ->横幅频道 ->本地横幅

有关应用程序的信息:

调试: 0启用缓存(每页 10-1 小时 *)

根据我自己使用 CakePHP

和 MySQL(超过 250 个表)运行繁重应用程序的经验,瓶颈在于对 CakePHP ORM 的不当使用。

有时,您将获取比您需要的多得多的数据。

find('all')与高recursive值相关的功能看起来很酷,并加快了开发时间。

但事实上,这可能真的很糟糕,尤其是当您的应用程序和数据库正在增长时。关联模型的数量也将增长,递归获取越来越多的数据。

一个好的做法是始终指定所需的字段。此外,对于精彩查询,应取消绑定不需要的关联模型。

对于复杂查询,请不要犹豫,使用 query() 函数手动编写优化的查询。

在开发中,您应该启用 CakePHP 调试模式来分析 Config/core.php 文件中的 SQL 查询:Configure::write('debug', 2); 这将帮助您找到最慢的。

优化查询是第一步。如果这不能解决您的问题,则您的数据库可能设计得不好。

此外,您应该在生产中使用操作码缓存,例如 APC 或 XCache。

如果你真的想知道为什么它太慢了,那就这样做,

  1. 装备 Apache JMeter 来生成负载
  2. 通过 xdebug 启用分析 Web 应用程序
  3. 也分析您的 Web 服务器。

如果您想快速阅读在高负载站点中使用 PHP 的策略

Matt Curry的这本书可能会有所帮助:

http://www.pseudocoder.com/Super_Awesome_Advanced_CakePHP_Tips.pdf

@ 第 54 页 -> "快速制作您的蛋糕应用程序"