7

私は、特にMediaWikiを実行しているサイトをいくつか持っておりPHP、パフォーマンスを向上させる必要があります。MySQLただし、使用できるCPUの割合は限られています。

パフォーマンスを向上させるために私が考えることができる最善のことは、キャッシュを有効にすることです。しかし、私は混乱しています。それは本当に全体的なパフォーマンスを向上させるのでしょうか、それとも単に速度を向上させるのでしょうか。

私が考えることができるのは、キャッシュがファイルを使用する場合、これらのファイルのコンテンツを取得するためにより多くの処理が必要になるということです。SQLテーブルを使用する場合は、これらのテーブルのクエリにも多くの処理が必要になります。おそらく時間は短くなりますが、CPU使用率は高くなります。

それは正しいですか?キャッシングはより高速な結果を出すためにより多くのCPUを消費しますか、それとも全体的なパフォーマンスを向上させますか?

4

5 に答える 5

4

最も基本的なレベルでは、CPU を集中的に使用するプロセスの結果を格納するためにキャッシュを使用する必要があります。たとえば、オンザフライで画像を作成するサーバー側の画像ハンドラー (サムネイルと大きなプレビューなど) がある場合、すべての要求でこの操作を実行したくない場合は、このプロセスを実行する必要があります。一度、結果を保存します。その後、他のすべてのリクエストが保存された結果を取得します。

これは明らかに基本的なキャッシングの非常に単純化された説明であり、古いデータについて心配する必要がないため、この場合、イメージの使用は問題ありません。つまり、実際のイメージはどのくらいの頻度で変更されるのでしょうか? あなたの場合、データベースは大きく異なります。データをキャッシュする場合、実際のデータとキャッシュされたデータの間に瞬時の不一致が発生しないことをどのように保証できますか? データベースのクエリは、常に CPU を集中的に使用するタスクではありません (ただし、インデックス作成、テーブル サイズなどに関してデータベースがどのように設計されているかを考慮する必要があります)。それはCPUサイクルにあります。

まず、データベースの設計を確認し、次にクエリを確認する必要があります。たとえば、データベースを正しく正規化していますか、アーカイブするだけでクエリが膨大な量のデータをトロールしていますか、インデックスが作成されていないフィールドでテーブルを結合していますか、インデックスを作成できるフィールドを照会する where 句はありますか (INこれらでは特に悪いです)ケース)。

より抜本的な変更を調べる前に、クエリ アナライザーを手に入れ、テーブル構造とクエリを最適化してボトルネックを見つけることに時間を費やすことをお勧めします。

于 2012-09-27T09:35:34.957 に答える
0

自分の見た目をプロファイリングし、ボトルネックがどこで発生しているかを調べる必要があります。キャッシュは、ページの読み込みに最適なタイプであり、サーバーにまったくヒットしません。15 分ごとに情報を再読み込みするだけの非常に単純なキャッシュ システムを構築できます。そのため、ページが過去 15 分間にキャッシュされた場合、事前にレンダリングされたページが提供されます。ページが一度読み込まれると、一時ファイルが作成されます。15 分ごとに新しいページを作成します (誰かがそのページを読み込んだ場合)。

キャッシュは、サーバーが既に作業を完了したファイルのみを保存します。ファイルを作成する作業はすでに完了しており、保存するだけです。

于 2012-09-27T09:24:20.690 に答える
0

「パフォーマンスの向上」は、私が受け取る電子メールの一部のように聞こえます...

ここでは、相互に関連する 2 つのことが起こります。1 つは「特定のリクエストを処理するのにどれくらいの時間がかかるか」であり、もう 1 つは「限られたリソースで同時にいくつのリクエストを処理できるか」です。パフォーマンスについて話すとき、人々はこれらの概念のいずれかまたは両方を使用する傾向があります。

キャッシングは、これらの両方に役立ちます。

最も効果的なキャッシュ戦略は、マシンの外部のリソースを使用してコンテンツをキャッシュします。最も明白な例は、ユーザーのブラウザーまたは CDN です。CDN を使用できないと仮定しますが、HTTP キャッシュ ヘッダーの設定に少し労力を費やすことで、サーバーへの静的リソースまたは低速リソースに対する要求の数を大幅に減らすことができます。

動的コンテンツ (通常はデータベースにクエリを実行して生成する Web ページ) の場合、次に効果的なキャッシュ戦略は、ページ (の一部) によって生成された HTML をキャッシュすることです。たとえば、ホームページに「最も人気のあるアイテム」ボックスがある場合、これは通常、いくつかの適度に複雑なデータベース クエリを実行し、次に「データを HTML に変換する」バックエンド コードをいくつか実行します。HTML をキャッシュできる場合は、データベース クエリと、データを HTML に変換する CPU の労力の両方を節約できます。

それが不可能な場合は、一部のデータベース クエリの結果をキャッシュできる場合があります。これはデータベースの負荷を軽減するのに役立ち、通常は Web サーバーの負荷も軽減します。データベース クエリを実行して結果を処理するために必要なコードは、通常、キャッシュから項目を取得するよりも面倒です。高速であるため、リクエストをより迅速に処理でき、リソースをより迅速に解放できます。これにより、個々のリクエストに対するサーバーの負荷が軽減されるため、より多くの同時リクエストを処理できます。

于 2012-09-27T11:58:28.630 に答える
0

「パフォーマンス」と「速度」という用語を使用します。「パフォーマンス」は Web サーバーの CPU サイクルに関連し、「速度」はページをユーザーに提供するのにかかる時間に関連すると仮定します。Web サーバーの「パフォーマンス」を最大化し (ページの提供に必要な CPU サイクルの合計数を減らすことによって)、「速度」を最大化 (Web ページの提供にかかる時間を短縮) したいと考えています。

幸いなことに、キャッシングを使用すると、これらの指標の両方を同時に改善できます。コンテンツをキャッシュすることにより、キャッシュに格納される出力ページを作成し、最初にこの出力ページを作成した PHP コードを再実行する必要なく、繰り返しユーザーに直接提供できます (したがって、CPU サイクルが低下します)。キャッシュされたページをキャッシュからフェッチすると、PHP コードを再実行するよりも消費される CPU サイクルが少なくなります。

キャッシュは、ページを要求するすべてのユーザーにとって一般的に同じである Web ページ (たとえば wiki など) や、一般にあまり頻繁に変更されないページ (再び wiki) に特に適しています。

于 2012-09-27T09:39:36.977 に答える