2012-09-27 7 views
7

PHPMySQLのサイトがあり、特にMediaWikiが動作しており、パフォーマンスを向上させる必要があります。しかし、使用できるCPUの割合は限られています。キャッシュは常にパフォーマンスを向上させますか?

パフォーマンスを向上させるために最もよく考えられることは、キャッシュを有効にすることです。しかし、私は混乱しています:それは実際にパフォーマンスを全体的に向上させるか、スピードを向上させるだけでしょうか?

私が考えることは、キャッシュがファイルを使用する場合、これらのファイルの内容を取得するためにより多くの処理が必要になることです。 SQLテーブルを使用する場合は、これらのテーブルを照会する処理がさらに必要になりますが、おそらく時間は短くなりますが、CPU使用率はもっと高くなります。

それが正しいですか?キャッシングはスピードの結果を出すためにCPUを消費するか、パフォーマンス全体を改善しますか?

+1

あなたの測定は何を示しましたか? – arkascha

+0

"特にMediaWiki"はあなたのQにyesを意味しますが、正しい種類のキャッシュだけを意味します。例えば、MWはデフォルトでinnodbを使用しているので、MyISAMのキャッシュはここで一つの助けになります。 MWキャッシングページを読んでください。ゲスト(つまりほとんどの)訪問者のためにMWで大きな違いを生むファイルベースのキャッシュを構成できます。 – TerryE

+0

https://www.mediawiki.org/wiki/Manual:Performance_tuningを参照してください.MediaWikiを使用すると、主な関心事は、速度が遅く、多くのCPUを必要とするwikitextの解析を避けることです。 – Nemo

答えて

4

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

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

まず、データベース設計と2番目にクエリを調べる必要があります。例えば、あなたはnormalizing your database correctlyです。あなたがアーカイブするだけで、膨大な量のデータをトラッキングしているクエリです。索引付けされていないフィールドでテーブルを結合していますか?where句がインデックスできるフィールドを照会していますか?(これらの場合は特に悪いです。 。

query analyzerを保持し、テーブル構造とクエリを最適化して、ボトルネックを見つけてから、さらに劇的な変更を検討することをお勧めします。

0

あなたの外見をプロファイルし、ボトルネッキングが起こっている場所を見つける必要があります。キャッシュは、サーバー負荷が最も低いページ負荷です。サーバー負荷が全くかかりません。 15分の情報だけをリロードする非常にシンプルなキャッシュシステムを構築することができます。したがって、ページが最後の15分にキャッシュされていた場合は、事前レンダリングされたページが表示されます。一度読み込まれたページは、一時ファイルを作成します。 15分ごとに新しいページを作成します(誰かがそのページを読み込んだ場合)。

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

1

参考:http://msdn.microsoft.com/en-us/library/ee817646.aspx

パフォーマンス:キャッシング技術は、一般的にこのように繰り返しデータの作成、処理、および輸送を避け、データの消費者にできるだけ近い関連データを格納することにより、アプリケーションのパフォーマンスを向上させるために使用されています。 たとえば、国のリストなど、変更されないデータをキャッシュに格納すると、データアクセス操作が最小限に抑えられ、要求ごとに同じデータを再作成する必要がなくなるため、パフォーマンスが向上します。

スケーラビリティ:アプリケーションの多くのユーザーやプロセスは、同じデータ、ビジネス機能、およびユーザーインターフェイスの断片を頻繁に要求します。この情報が要求ごとに処理されると、貴重なリソースが無駄になり、同じ出力が再作成されます。その代わりに、結果をキャッシュに格納し、要求ごとに再利用することができます。これにより、ユーザーベースの増加に伴い、これらのタスクのサーバーリソースの需要が一定に維持されるため、アプリケーションのスケーラビリティが向上します。 たとえば、Webアプリケーションでは、Webサーバーは各ユーザー要求に対してユーザーインターフェイスを表示する必要があります。レンダリングされたページをASP.NET出力キャッシュにキャッシュして、将来の要求に使用し、リソースを他の目的に使用できるようにすることができます。

キャッシングデータは、データベースサーバーのリソースの拡張にも役立ちます。頻繁に使用されるデータをキャッシュに保存することにより、データベース要求が少なくなり、より多くのユーザーにサービスを提供できます。

利用状況:アプリケーションに情報を提供するサービスが利用できないことがあります。そのデータを別の場所に保存することで、アプリケーションはネットワーク遅延、Webサービスの問題、ハードウェアの障害などのシステム障害から生き残ることができます。 たとえば、ユーザーがデータストアから情報を要求するたびに、情報を返したり、結果をキャッシュしたり、各要求でキャッシュを更新したりすることができます。データストアが使用できなくなった場合でも、データストアがオンラインに戻るまで、キャッシュされたデータを使用して依頼を処理できます。

+3

すべての点を尊重して、ここのコピーアンドペーストの回答はhttp://books.google.co.uk/books?id=MEOmjpKLmqYC&pg=PA414&lpg=PA414&dq=%22Performance+:+Caching+techniquesではありません20%20%20%20%20%%20%%22%&f = false - %%%22%%20%%20%%20%%20%%20%%20%%20%%20%%20%%20%%20%もしあなたがそれをやろうとすれば、少なくとも信用供与源を参照してください。 –

+0

私は最高のソリューションを提供したい。だから私はネット上でサーフィンを行い、ここで最高のソリューションを提供します。それは意味をなさない?あなたが思うこと ? –

+0

はい、元の質問に答えるのにペーストの約35%が関係します。 – user989056

0

「パフォーマンス」と「スピード」という用語を使用します。私は、あなたのウェブサーバー上のCPUサイクルに関連する「パフォーマンス」を想定しており、「スピード」はページをユーザーに提供するのにかかる時間に関連しています。 「スピード」を最大限に高めながら(Webページを提供するのにかかる時間を短縮しながら)、Webサーバーのパフォーマンスを最大化したい(ページを提供するために必要なCPUサイクルの総数を減らす)。

キャッシングが両方のメトリックを同時に改善できるということは良いニュースです。コンテンツをキャッシュすることで、キャッシュに格納された出力ページを作成し、この出力ページを最初に作成したPHPコードを再実行することなく(つまりCPUサイクルを削減することなく)ユーザに繰り返し提供することができます。キャッシュされたページをキャッシュから取得することは、PHPコードを再実行するよりもCPUサイクルを消費します。

キャッシングは、ページを要求したすべてのユーザー(通常はwiki)および一般的にあまり頻繁に変更されないページ(同じくwiki)で一般的に同じWebページに特に適しています。

0

「の性能を強化し」私が得る電子メールのいくつかのように聞こえる...

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

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

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

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

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

関連する問題