1

(私はGoogle翻訳を使っています)。

現在、車両のシステム (30,000 台の車両、10,000 人のユーザー) を開発しており、この期間中はローカル環境でのみテストを実行しました。

ここで問題が発生しました。Cloud Server に送信すると、mysql が 100 ~ 140% の処理を​​消費するようになり、サイトが 5 ~ 30 分程度低下します。

それまではすべてがローカルホストにあったため、彼を特定できなかったため、この問題を解決する方法がわかりません。

そして、私の質問はまさにこれです: CakePHP アプリケーションを使用して、どのようにシステムが過負荷になるのでしょうか?

テーブルに関するいくつかの基本情報:

顧客 -> 契約 -> プラン -> 広告

広告 -> (車両、部品、サービス)

車両 -> (ブランド、モデル、バージョン、カテゴリ、色、燃料)

バナー -> バナー チャネル -> ローカル バナー

アプリケーションに関する情報:

デバッグ: 0 キャッシュが有効 (1 ページあたり 10 ~ 1 時間 *)

4

3 に答える 3

5

私自身の経験では、CakePHP と MySQL (250 以上のテーブル) を使用して負荷の高いアプリを実行した場合、ボトルネックは CakePHP ORM の不適切な使用に存在します。

場合によっては、必要以上のデータを取得することがあります。

find('all')高価値に関連付けられた関数recursiveはクールに見え、開発時間を短縮します。

しかし実際には、特にアプリとデータベースが成長している場合、これは非常に厄介な問題になる可能性があります。関連するモデルの数も増え、再帰的に取得するデータがますます増えます。

常に必要なフィールドを指定することをお勧めします。また、特定のクエリについては、必要のない関連モデルのバインドを解除する必要があります。

複雑なクエリの場合は、関数を使用して最適化されたクエリを手動で作成することを躊躇しないでくださいquery()

Config/core.php開発中は、ファイル内の SQL クエリをプロファイリングするために CakePHP デバッグ モードを有効にする必要があります。Configure::write('debug', 2);これにより、最も遅いものを見つけることができます。

クエリを最適化することが最初のステップです。これで問題が解決しない場合は、データベースが適切に設計されていない可能性があります。

さらに、本番環境ではAPCXCacheなどのオペコード キャッシュを使用する必要があります。

于 2012-04-05T22:34:17.297 に答える
2

マット・カリーのこの本が役に立つかもしれません:

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

@ Page 54 -> "Make Your Cake App Fast"

于 2012-04-06T06:25:03.843 に答える
2

遅すぎる理由を本当に知りたい場合は、これを実行してください。

  1. Apache JMeterを装備して負荷を生成する
  2. xdebug によるWeb アプリのプロファイリングを有効にする
  3. Web サーバーのプロファイリングも行います

高速化したい場合は、高負荷サイトで PHP を使用するための Tactics を参照してください。

于 2012-04-05T20:57:49.547 に答える