2009-04-21 15 views
3

実際にインストールしているわけではありません。私は現在開発のためにLAMPを使用しており、トラフィックの多いサイトに対してmemcachedを使い始めたいと考えています。どのタイプのdbコールをキャッシュする必要がありますか? (すべて?)、そして開発サーバーで負荷テストを行う良い方法は何ですか?プロダクションサイトで最初に見ていなければならないベンチマークはありますか?このサイトは主に非常に少数の更新/挿入で選択されます。ラムの使用量とトラフィックの関係、または試行錯誤のほとんどの場合、それに従わなければならない一般的なガイドラインはありますか?memcachedを徐々に導入し、既存のサイトでテストする方法は?

ありがとうございました。

答えて

1

まず、2次機能をサポートするクエリから始めます。最初にキャッシュされたものにどのように反応するのかを観察してください。サイトがどのように反応するのかを確認したら、他のクエリをキャッシュしようとします。私はmemcachedを一度も使用していませんが、私はcodeigniterでクエリキャッシングをしています。

私は自分のサイトの特定のドロップダウンボックスやフォーム要素を設定するために使用するクエリをキャッシュすることから始めます。それらはほとんど変更されず、テーブルにレコードを追加するデータベースに新しいファイルを読み込むなどの管理操作をしても変更されません。そのような質問があれば、最初に試してみることをお勧めします。

1

常に測定してから最適化してください。あなたの主要なボトルネックを書き留め、その上でいくつかの良いパフォーマンステストを行います。

現在、独自の負荷をエミュレートできるベンチマークプログラムはあまり多くありません。すべてのサイトが一意であるため、私はあなたにお勧めできないと思います。

しかし、高トラフィックをエミュレートしようとするいくつかのツールがあります。

+0

負荷テスト:私はあなたにこの小さなネットワークを貸すことができます。私はあまりにも多くを言った。 – Louis

+0

時には、ツールを組み込んだもっと強力なものが欲しい。 –

1

まず、それはあなたがデータを必要とするどのくらいの頻度、あなたがプレイしているどのくらいのラムに依存し、どのくらいの頻度データが更新されます。

どの種類のキャッシュをキャッシュする必要がありますか? (すべて?)

データを選択するのとほぼ同じ速度でデータを更新する場合、おそらくキャッシュに値するものではありません。

Ericが言ったように、あなたのサイトに使用する他の静的コンテンツは、memcacheをうまく利用すると言いました。

キャッシュされたアイテムを更新したら、そのアイテムを削除/更新することを忘れないでください。

開発サーバーで負荷テストを行うにはどうすればよいですか?

あなたが気にしている負荷テストの種類は不明です。

私のプロダクションサイトで最初に調べておくべきベンチマークはありますか?このサイトは主に非常に少数の更新/挿入で選択します。

作成しているクエリのタイプをチェックして、ログに記録する可能性があります。おそらく最も頻繁にキャッシュされる可能性があります。

最初に行うことのできる他のSQL最適化もないことを確認してください。

ラムの使用量とトラフィックの比較に従わなければならない一般的なガイドラインがありますか、それともほとんどの場合試行錯誤ですか?

ラムとトラフィックの関係はあまりないと思います。私はあなたのボックスが交通量のピーク時にどのような機能を果たす必要があり、それに応じてmemcacheのラム制限を設定する必要があるのか​​把握します。

1

SELECTが多く、データベースへの書き込みが少ない場合、MySQLのクエリキャッシュはデータをキャッシュするのにかなり良い仕事をするはずです。

クエリキャッシュは、次のことをしようと取り組んでいる方法を効果的に表示するには:

> SHOW GLOBAL STATUS LIKE 'Qcache_hits'; 
+---------------+--------+ 
| Variable_name | Value | 
+---------------+--------+ 
| Qcache_hits | 735740 | 
+---------------+--------+ 
1 row in set (0.00 sec) 


> SHOW GLOBAL STATUS LIKE 'Com_select'; 
+---------------+---------+ 
| Variable_name | Value | 
+---------------+---------+ 
| Com_select | 5644038 | 
+---------------+---------+ 
1 row in set (0.00 sec) 

この場合、ヒット率の計算にQcache_hits/(Qcache_hits + Com_select)

を見つけるには、それは11%のヒット率です735740/(735740 + 5644038) = 0.1153

ですかなり貧しいです。

マシンの%がはるかに高い場合は、memcachedを使用するケースが少なくなる可能性があります。

多くの場合、MySQLのクエリキャッシュはうまく機能します(これにはあなた自身が含まれていると思われます)。キャッシュエントリは、キャッシュされたクエリが変更されていない行に関連する場合でも、テーブルが更新されるたびに無効化されますが、これは大きな欠点です。あなたとあなたのアプリケーションがMySQLのクエリキャッシュよりもキャッシュの有効期限を賢くすることができるときに、memcachedを使用して行レベルに近い項目をキャッシュすることができます。

質問キャッシュヒット率の結果を教えてください。あなたも、あなたは、現時点では無効になっクエリキャッシュを持っていることがあります

あなたはそれが次のクエリを実行することによって有効になっているかどうかを確認することができます(!):

> SHOW GLOBAL VARIABLES LIKE '%cache'; 

チェックhave_query_cache = YESため、そこでquery_cache_size > 0

関連する問題