MySQL query_cache_type パラメータと使用方法の詳細

MySQL query_cache_type パラメータと使用方法の詳細

MySQL クエリ キャッシュを設定する目的は次のとおりです。

クエリ結果をキャッシュしておくと、次回同じクエリを実行するときに結果セットから直接取得できます。これにより、再度検索するよりもはるかに高速になります。

クエリ キャッシュの最終結果は、逆効果になることです。

クエリ キャッシュによってパフォーマンスが向上しない客観的な理由は 2 つあります。

1. SQL文のハッシュ値をキーとして使用し、SQL文の結果セットを値として使用します。これにより、select user from mysql.userやSELECT user FROM mysql.userなどの問題が発生します。

これら 2 つは異なる SQL 文として扱われます。このとき、結果セットがすでに存在していても使用されません。

2. クエリの基になる下位テーブルが変更されると、このテーブルに関連するクエリ キャッシュが無効になります。システムの同時実行性が高い場合、このオーバーヘッドはかなり大きくなります。結果セットを無効にする操作にも同時実行性が必要です。

アクセス制御にはロックも必要になります。同時実行数が多い場合、クエリ キャッシュ ロックの待機が発生します。

3. 使用するかどうかはビジネスモデルによって異なります。

クエリ キャッシュを構成する方法:

query_cache_type システム変数は、クエリ キャッシュ機能を有効にするか無効にするかを制御します。

query_cache_type=0 の場合は閉じていることを意味し、1 の場合は開いていることを意味し、2 の場合は選択で SQL_CACHE が明示的に指定された場合にのみキャッシュされることを意味します。

このパラメータの設定は少し奇妙です。1. クエリキャッシュが事前に閉じられているが、@@global.query_cache_type=1; と設定されている場合、エラーが報告されます。

エラー 1651 (HY000): クエリ キャッシュが無効になっています。有効にするには、query_cache_type=1 でサーバーを再起動してください。

2. 以前に開かれていて、それを閉じようとすると、閉じ方が不完全となり、クエリは引き続きキャッシュを見つけようとします。

クエリ キャッシュをオフにする最善の方法は、my.cnf で query_cache_type=0 を設定し、mysql を再起動することです。

クエリ キャッシュ関連のシステム変数:

have_query_cache は、この MySQL バージョンがクエリ キャッシュをサポートしているかどうかを示します。

query_cache_limit は、単一の結果セットをキャッシュできる最大値を示します。

query_cache_min_res_unit キャッシュされた各結果セットが占有する最小メモリ。

query_cache_size クエリ キャッシュに使用されるメモリ サイズ。

クエリ キャッシュ ヒット率を監視する方法:

Qcache_free_memory クエリ キャッシュの現在の残りスペース サイズ。

Qcache_hits クエリ キャッシュ ヒットの数。

Qcache_inserts クエリ キャッシュ挿入の数。

つまり、キャッシュヒット率はQcache_hits/(Qcache_hits+Qcache_inserts)です。

一般的には、これを単独で設定することはできません。組み合わせる必要があります。以下の記事を読むことをお勧めします

以下もご興味があるかもしれません:
  • MySQL クエリ キャッシュのグラフィカルな説明
  • MySQL 最適化 query_cache_limit パラメータの説明
  • MySQLがクエリキャッシュをキャンセルした理由
  • MySQL キャッシュの起動方法とパラメータの詳細 (query_cache_size)
  • MySQL query_cache に関する誤解
  • MySQLクエリキャッシュ原理の分析

<<:  Tomcat プロセスの CPU 使用率が高い場合の解決策

>>:  jQuery Ajax チャットボットの実装事例

推薦する

CSS の両端揃えを実現する div+css レイアウトの 4 つの方法の概要

2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...

JavaScript で 24 以上の配列メソッドを手動で実装する

目次1. トラバーサルクラス1. 各2. 地図3. すべての4. いくつか5. フィルター6. 減ら...

Vmwareでディスクを追加する方法:ディスクを拡張する

この記事では、ディスクを追加または拡張して、Vmare で有効にする方法について説明します。シナリオ...

JSはユーザー登録インターフェース機能を実装します

この記事の例では、ユーザー登録インターフェース機能を実装するためのJSの具体的なコードを参考までに共...

mysql bin-log ログファイルを sql ファイルに変換する方法

mysqlbinlogのバージョンを表示mysqlbinlog -V [--version] bin...

HTML と CSS に関する基本的なメモ (フロントエンドでは必読)

HTMLに触れた当初はレイアウトにいつもテーブルを使っていましたが、とても面倒で見た目も悪かったの...

W3C チュートリアル (12): W3C SOAP アクティビティ

Web サービスは、アプリケーション間の通信に関係しています。SOAP は、Web サービス間の X...

MySQL の完全なデータベース バックアップ データを使用して単一のテーブル データを復元する方法

序文データベースをバックアップするときは、データベース全体のバックアップを使用します。ただし、何らか...

MySQL ビュー管理ビューの例の詳細説明 [追加、削除、変更、クエリ操作]

この記事では、例を使用して MySQL ビューの管理ビュー操作について説明します。ご参考までに、詳細...

検索エンジンのウェブサイトの入り口の無料コレクション

1: Baiduウェブサイトログイン入口ウェブサイト: http://www.baidu.com/s...

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

Web アプリ開発時間を短縮する 10 の時間を節約するヒント (グラフィカル チュートリアル)

今日の開発環境では、速いほど良いです。 「迅速なアプリケーション開発」、「アジャイル ソフトウェア開...

大量のデータをMySQLにインポートする際に発生する問題と解決策の分析

プロジェクトでは、SQL を使用してデータ分析を実行するために、大量のデータをデータベースにインポー...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...

Ubuntu 16.04 にソースコードから Mininet をインストールする

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...