2012年3月20日火曜日

MySQLクエリキャッシュでWebサイトをスピードアップ

Webアプリケーションを高速化する最良の方法の一つは、同じ要求を行うと次のページで、事実上瞬時にアクセスするためにメモリ内で一般的に使用されるSQLクエリをキャッシュしてデータベースにクエリキャッシュを有効にすることです。

この方法は非常に強力である理由は、あなたのWeb​​アプリケーションに変更を加える必要はありません、あなただけのメモリを少し犠牲にしなければならないことです。これはあなたの問題のすべてを修正するつもりはない、それは間違いなく傷つけることはできない。

注:アプリケーションの更新をテーブルが頻繁に、その後、クエリキャッシュは常にパージされ、あなたは多くのまたはこのから利益を得るしない場合。これは主にこのようなWordPressのブログのようなデータベースに対して読み取りとしないアプリケーションに理想的です。あなたが共有ホスティング上で実行されている場合にも動作しません。

サーバーが実行中にキャッシュを有効にする

あなたがしたいまず最初は、MySQLのインストールは、実際に利用可能なクエリのキャッシュ機能をサポートしていることを確認することです。ほとんどのディストリビューションではありませんが、とにかくチェックしてください。

あなたは、クエリキャッシュが使用可能であれば教えてくれるあなたのMySQLのコンソールからこのコマンドを実行することをお勧めします。

mysql> show variables like 'have_query_cache'; +------------------+-------+ | Variable_name    | Value | +------------------+-------+ | have_query_cache | YES   | +------------------+-------+ 

ほとんどのホスティングプロバイダは、デフォルトでこれをイネーブルにするかされていないため、クエリキャッシュが実際に有効になっていることを意味するとして、これを混同しないでください。奇妙なことに、私のUbuntu Feistyのインストールは、すでにそれが有効になっていた...

次に我々はチェックし、クエリキャッシュが有効になっているかどうかを確認する必要があります。変数クエリの%をチェックして、すべてを一度我々は、複数の変数を確認する必要がありますので、我々としてもそれを行うことが

mysql> show variables like 'query%'; +------------------------------+---------+ | Variable_name                | Value   | +------------------------------+---------+ | query_alloc_block_size       | 8192    | | query_cache_limit            | 1048576 | | query_cache_min_res_unit     | 4096    | | query_cache_size             | 8388608 | | query_cache_type             | ON      | | query_cache_wlock_invalidate | OFF     | | query_prealloc_size          | 8192    | +------------------------------+---------+ 

ここで重要なリストの項目とその意味は次のとおりです。

  • query_cache_sizeの - これは、バイト単位でキャッシュのサイズです。この値を0に設定すると効果的にキャッシュが無効化されます。
  • query_cache_typeの - この値はデフォルトで有効にするキャッシュをクエリのONまたは1でなければなりません。
  • query_cache_limit - これはキャッシュされる最大サイズのクエリ(バイト単位)です。

query_cache_sizeの値が0に設定するか、あなたはそれを変更したい場合は、値はバイト単位であることを念頭に置いて、次のコマンドを実行する必要があります。例えば、あなたが我々が使用したいキャッシュに8メガバイトの割り当てにしたい場合は1024 * 1024 * 8の値として= 8388608。

SET GLOBAL query_cache_size = 8388608;

同様に、他のオプションは、同じ構文で設定することができます。

SET GLOBAL query_cache_limit = 1048576;
SET GLOBAL query_cache_type = 1;

それは実際に働いているなら、今どのように伝えるか?あなたは、フードの下で何が起こっているかをざっとみてみると"QC"で始まるすべての変数をプルするには、SHOW STATUSコマンドを使用することができます。

mysql> SHOW STATUS LIKE 'Qc%'; +-------------------------+--------+ | Variable_name           | Value  | +-------------------------+--------+ | Qcache_free_blocks      | 65     | | Qcache_free_memory      | 201440 | | Qcache_hits             | 18868  | | Qcache_inserts          | 2940   | | Qcache_lowmem_prunes    | 665    | | Qcache_not_cached       | 246    | | Qcache_queries_in_cache | 492    | | Qcache_total_blocks     | 1430   | +-------------------------+--------+ 8 rows in set (0.00 sec) 

あなたは私に十分な空きメモリの左のを持っていることを統計でわかります。サーバがメモリ不足によるのプルーンの多くを示している場合、この値を増やすことを検討する必要があるかもしれませんが、私は、Webサーバーのクエリキャッシュに大量のメモリを費やすだろう...あなたは、Apache、PHP、ルビー、またはものは何でも使っているためにメモリーが使用可能に残しておく必要があります。

configファイルで有効にします。

これらの変更は再起動すると失われますか、MySQLサーバを再起動する場合、あなたはMySQLのあなたのの/ etc / mysql / my.cnfの設定ファイルにそれらを追加する必要があります。それは、インストールの別の場所にあるかもしれないことに注意してください。

sudoまたはrootモードでテキストエディタを使用してファイルを開いて、そして彼らが既にファイルに存在しないならば、これらの値を追加します。彼らが存在する場合は、単にそれらのコメントを外します。

query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576

クエリーのキャッシュ機能が大幅にアプリケーションの大部分で読み取りいない場合は特に、Webアプリケーションの速度を向上させることができます。上記の方法を使用してステータスを監視し、それが時間の経過とともにどのように機能するかを参照してください。

0 件のコメント:

コメントを投稿