ホームページ  >  記事  >  データベース  >  MySQL キャッシュ クエリとクリア コマンドのサンプル コードを共有する

MySQL キャッシュ クエリとクリア コマンドのサンプル コードを共有する

零下一度
零下一度オリジナル
2017-04-22 17:02:501118ブラウズ

この記事では主に、MySQL キャッシュのクエリとクリアコマンドの詳細な説明を紹介します。データが頻繁に変更されず、同じ SQL クエリが多数あるテーブルでは、クエリ キャッシュが必要な場合に役立ちます。参照してください

Mysqlクエリキャッシュ
クエリキャッシュの役割は、クエリが以前と同じクエリを受け取ったときに、サーバーが最後のクエリを再度分析して実行する代わりに、クエリキャッシュから結果を取得することです。 。これにより、パフォーマンスが大幅に向上し、時間が節約されます。
1. クエリキャッシュを設定します
設定ファイルを変更し、[mysqld] の下の query_cache_size と query_cache_type を変更します (そうでない場合は追加します)。このうち、query_cache_size はキャッシュのサイズを示し、query_cache_type は 3 つの値を持ち、キャッシュする選択結果セットの種類を示します。 query_cache_type の値は次のとおりです:
0 または off はキャッシュをオフにします
1 または onキャッシュをオンにしますが、 sql_no_cache を使用して select ステートメントを保存しません。 select sql_no_cache name from wei where id=2
2 をキャッシュしない場合、または条件付きキャッシュの有効化を要求する場合は、sql_cache を使用して select ステートメントのみをキャッシュし、 select sql_cache name をキャッシュしますfrom wei where id=4
例の設定は以下の通り、設定完了後に再起動する Mysqlサーバーで十分です。


query_cache_size=10M 
query_cache_type=1

次のコマンドを使用して、有効かどうかを確認できます。have_query_cache は有効かどうかを示し、query_cache_limit は 1 つのクエリで使用できるバッファ サイズを指定します。デフォルトは 1M です。システムによって割り当てられる最小キャッシュ ブロック サイズ。デフォルトは 4KB です。大きな値を設定すると、大きなデータ クエリに適していますが、クエリがすべて小さなデータ クエリである場合、メモリの断片化と無駄が発生しやすくなります。上記; query_cache_wlock_invalidate は、他のクライアントが MyISAM テーブルをクエリしているときを意味します。書き込み操作を実行するときに、クエリがクエリ キャッシュにある場合、キャッシュ結果が返されるか、書き込み操作が完了するまで待ってからテーブルを読み取って、結果。


mysql> show variables like '%query_cache%'; 
+------------------------------+----------+ 
| Variable_name        | Value  | 
+------------------------------+----------+ 
| have_query_cache       | YES   | 
| query_cache_limit      | 1048576 | 
| query_cache_min_res_unit   | 4096   | 
| query_cache_size       | 10485760 | 
| query_cache_type       | ON    | 
| query_cache_wlock_invalidate | OFF   | 
+------------------------------+----------+ 
6 rows in set (0.00 sec)

2. テスト
最初に 1 回実行し、wei から count(*) を選択してから再度実行すると、2 回目の実行にかかる時間が 1 回目よりも大幅に短縮されていることがわかります。 、2 回目の実行では選択結果がキャッシュから 2 回読み取られるためです。


mysql> select count(*) from wei ; 
+----------+ 
| count(*) | 
+----------+ 
| 4194304 | 
+----------+ 
1 row in set (3.92 sec) 
mysql> select count(*) from wei ; 
+----------+ 
| count(*) | 
+----------+ 
| 4194304 | 
+----------+ 
1 row in set (0.00 sec)

次のコマンドで現在のキャッシュの状況を確認できます


mysql> show status like 'qcache%'; 
+-------------------------+----------+ 
| Variable_name      | Value  | 
+-------------------------+----------+ 
| Qcache_free_blocks   | 1    | 
| Qcache_free_memory   | 10475424 | 
| Qcache_hits       | 1    | 
| Qcache_inserts     | 1    | 
| Qcache_lowmem_prunes  | 0    | 
| Qcache_not_cached    | 0    | 
| Qcache_queries_in_cache | 1    | 
| Qcache_total_blocks   | 4    | 
+-------------------------+----------+ 
8 rows in set (0.00 sec)

各パラメータの意味は次のとおりです:

  • Qcache_free_blocks: キャッシュ内の隣接するメモリブロックの数。数値が大きい場合は、断片が存在する可能性があることを示します。 FLUSH QUERY CACHE はキャッシュをデフラグして空きブロックを取得します。

  • Qcache_free_memory: キャッシュ内のメモリを解放します。

  • Qcache_hits: クエリがキャッシュにヒットするたびに増加します。

  • Qcache_inserts: クエリが挿入されるたびに増加します。ヒット数を挿入数で割ったものがミス率です。

  • Qcache_lowmem_prunes: キャッシュがメモリ不足になり、より多くのクエリのためのスペースを確保するためにキャッシュをパージする必要があった回数。この数値は長期間にわたって確認するのが最適です。この数値が増加している場合は、深刻な断片化またはメモリ不足を示している可能性があります。 (上記の free_blocks と free_memory は、どの状況であるかを示します)

  • Qcache_not_cached: キャッシュに適さないクエリの数。通常、これらのクエリは SELECT ステートメントではないか、now() などの関数を使用していないためです。

  • Qcache_queries_in_cache: 現在キャッシュされているクエリ (および応答) の数。

  • Qcache_total_blocks: キャッシュ内のブロックの数。


キャッシュのクリア
mysql の FLUSH 構文 (キャッシュのクリア)


FLUSH flush_option [,flush_option]

MySQL で使用される内部キャッシュをクリアしたい場合は、FLUSH コマンドを使用する必要があります。 FLUSH を実行するには、リロード権限が必要です。
flush_option は次のいずれかになります。

  • HOSTS これは最も使用され、頻繁に使用されます。主にホスト キャッシュ テーブルをクリアするために使用されます。一部のホストの IP 番号が変更された場合、または「ホスト... がブロックされています」というエラー メッセージが表示された場合は、ホスト テーブルをクリアする必要があります。 MySQL サーバーへの接続時に特定のホストで max_connect_errors を超えるエラーが連続して発生すると、MySQL はセキュリティ上の理由からホストからのそれ以上の接続リクエストをブロックします。ホスト テーブルをクリアすると、ホストは再度接続を試行できるようになります。

  • LOGS 現在のバイナリ ログ ファイルを閉じて、新しいバイナリ ログ ファイルの名前を現在のバイナリ ファイルの番号に 1 加えます。

  • PRIVILEGES これも、再認可が実行されるたびに、万が一に備えて新しい権限をすぐに有効にするために、データベース権限テーブルからキャッシュに権限を再ロードすることが目的です。

  • TABLES 開いているテーブルをすべて閉じると、この操作によりクエリ キャッシュの内容がクリアされます。

  • 読み取りロックを使用してテーブルをフラッシュする テーブルのロック解除が明示的に実行されるまで、開いているテーブルをすべて閉じ、データベース内のすべてのテーブルに読み取りロックを追加します。 この操作はデータのバックアップによく使用されます。

  • ステータス ほとんどのステータス変数を 0 にリセットします。

  • MASTER バイナリ ログ インデックス ファイル内のすべてのバイナリ ログ ファイルを削除し、バイナリ ログ ファイルのインデックス ファイルを空にリセットし、新しいバイナリ ログ ファイルを作成します。ただし、これは推奨されなくなり、リセットに変更されました。マスター。ご想像のとおり、以前は 1 つの簡単なコマンドで実行できましたが、以前の方法では、まず現在のバイナリ ログ ファイルの名前を調べてから、パージを使用する必要がありました。手術。

  • クエリ キャッシュ クエリ キャッシュを再編成し、フラグメントを削除し、パフォーマンスを向上させます。ただし、これはクエリ キャッシュ内の既存のデータには影響しません (クエリ キャッシュの内容をクリアします)。クエリキャッシュも同様です)。

  • SLAVE これは、レプリケーションのリセットに似ています。これは、スレーブ データベースにマスター データベースのレプリケーションの場所を忘れさせ、マスターと同様に、推奨されなくなり、スレーブのリセットに変更されました。これもとても便利です。

通常、フラッシュ操作はバイナリログファイルに記録されますが、FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK はバイナリログファイルに記録されません。ログ ファイルを作成すると、スレーブ データベースに影響を与えます。注: リセット操作は、実際にはフラッシュ操作の拡張バージョンの役割を果たします。

以上がMySQL キャッシュ クエリとクリア コマンドのサンプル コードを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。