MySql キャッシュ クエリの原理とキャッシュ監視およびインデックス監視の概要

MySql キャッシュ クエリの原理とキャッシュ監視およびインデックス監視の概要

クエリキャッシュ

1. クエリキャッシュの動作原理

クエリ ステートメントを実行する前に、MySQL はクエリ ステートメントをクエリ キャッシュ内のステートメントとバイト単位で比較します。完全に一致するものだけが同一であるとみなされます。次のように、これら 2 つのステートメントは異なるクエリと見なされます。

tb1_nameから*を選択

tb1_nameから*を選択

1) 異なるデータベース、異なるプロトコル バージョン、または異なる文字セットに対するクエリは、異なるクエリとして扱われ、個別にキャッシュされます。

2) 次の2種類のクエリはキャッシュされません

a. 準備された声明

b. ネストされたクエリのサブクエリ

3) クエリ キャッシュからクエリ結果を取得する前に、MySQL は、クエリに関係するすべてのデータベースとテーブルに対するクエリ権限がユーザーにあるかどうかを確認します。権限がない場合、キャッシュされたクエリ結果は使用されません。

4) キャッシュクエリからクエリ結果が返された場合、サーバーはCom_selectの代わりにQcache_hitsステータス変数を増分します。

5) テーブルが変更されると、そのテーブルを使用するすべてのキャッシュされたクエリが無効になり、キャッシュから削除されます。テーブルは、INSERT、UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE、DROP DATABASE などのいくつかの種類のステートメントによって変更される場合があります。

参考リンク:

http://dev.mysql.com/doc/refman/4.1/en/クエリキャッシュ操作.html

2. キャッシュクエリが有効になっているかどうかを確認する

'have_query_cache' のような変数を表示します。

MySql キャッシュ クエリの原理とキャッシュ監視およびインデックス監視

3. クエリキャッシュからすべてのクエリキャッシュを削除します。

クエリキャッシュをリセットします。

4. クエリキャッシュのパフォーマンス監視

'Qcache%' のようなステータスを表示

MySql キャッシュ クエリの原理とキャッシュ監視およびインデックス監視

出力の説明:

Qcache_free_blocks: クエリキャッシュ内の空きメモリブロック

Qcache_free_memory: クエリキャッシュ内の空きメモリの量

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

Qcache_inserts: クエリ キャッシュに追加されたクエリの数 (キャッシュされなかった読み取りではなく、無効化された読み取り)

Qcache_lowmen_prunes: メモリ不足のためクエリ キャッシュから削除されたクエリの数。

Qcache_not_chached: キャッシュされていないクエリの数(query_cache_type 設定によりキャッシュされていない)

Qcache_queries_in_cache: キャッシュクエリに登録されたクエリの数

Qcache_total_blocks: クエリキャッシュ内のメモリブロックの合計数

合計 SELECT クエリ数:

Com_select+Qcache_hits+ パーサーによってエラーが検出されたクエリの数

このうち、Com_select はキャッシュミスの数を表し、Qcache_hits はキャッシュヒットの数を表します。

Com_select計算式:

Qcache_inserts+Qcache_not_cached+権限チェックエラーの数(列権限チェック中にエラーが見つかったクエリ)

インデックス監視

'handler_read%' のようなステータスを表示します。

MySql キャッシュ クエリの原理とキャッシュ監視およびインデックス監視

出力の説明:

ハンドラ_read_first

インデックスの最初のエントリが読み取られた回数。この値が高い場合、サーバーがフルインデックススキャンを頻繁に実行していることを示します。たとえば、col1がインデックス化されていると仮定すると、SELECT col1 FROM foo

インデックスの最初のエントリが読み取られる回数。この値が高い場合、col1 がインデックス付けされていると想定して、サーバーが SELECT col1 FROM foo などの完全なインデックス スキャンを多数実行していることを意味します。

ハンドラ読み取りキー

キーに基づいて行を読み取る要求の数。この値が高い場合、クエリに対してテーブルが適切にインデックス付けされていることを示しています。

キーに基づいて行を読み取る要求の数。この値が高い場合、実行されているリクエストに対してテーブルが適切にインデックスされていることを示しています。

ハンドラ_read_next

キー順序で次の行を読み取る要求の数。範囲制約のあるインデックス列をクエリしている場合、またはインデックス スキャンを実行している場合は、この値が増加します。

キーの順序に従って次の行を読み取る要求の数。制約セットを使用してインデックス列をクエリしたり、インデックス スキャンを実行したりすると、この値が増加します。

ハンドラー_read_prev

キー順で前の行を読み取る要求の数。この読み取り方法は主にORDER BY ... DESCを最適化するために使用されます。

キーの順に前の行の読み取りを要求する回数。この読み取り方法は主にORDER BY ... DESCを最適化するために使用されます。

ハンドラ_read_rnd

固定位置に基づいて行を読み取る要求の数。結果の並べ替えを必要とするクエリを多数実行している場合、この値は高くなります。MySQL がテーブル全体をスキャンする必要があるクエリが多数あるか、キーを適切に使用しない結合がある可能性があります。

固定位置の行を読み取る要求の数。値が高い場合は、結果セットの並べ替えを必要とするクエリが多数実行されていることを示します。テーブル全体のスキャンを必要とするクエリや、適切なキーを使用しない結合を多数実行している可能性があります。

ハンドラー_read_rnd_next

データ ファイルの次の行を読み取る要求の数。テーブル スキャンを頻繁に実行している場合、この値は高くなります。通常、これはテーブルに適切なインデックスが付けられていないか、クエリがインデックスを活用するように記述されていないことを示しています。

データ ファイル内の次の行を読み取る要求の数。値が高い場合は、完全なテーブルスキャンが多数実行されていることを示します。これは通常、テーブルが適切なインデックスを使用していないか、クエリ要求が既存のインデックスを活用していないことを示します。

参考リンク:

http://dev.mysql.com/doc/refman/5.7/en/dynindex-statvar.html#statvar-index-H

参考リンク:

http://dev.mysql.com/doc/refman/4.1/en/server-status-variables.html

http://dev.mysql.com/doc/refman/4.1/en/query-cache-status-and-maintenance.html

これで、MySql キャッシュ クエリの原理とキャッシュ監視およびインデックス監視の紹介に関するこの記事は終了です。MySql キャッシュ クエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL シリーズ 9 MySQL クエリ キャッシュとインデックス
  • MySQLにインデックスを追加しても効果がないいくつかの状況について簡単に説明します。
  • MySQL ジョイントインデックスの使用ルール
  • インデックススキャンを使用したMySQLソート
  • MySQLインデックスとは何ですか?わからない場合は聞いてください

<<:  Dockerコンテナ終了エラーコードの手順

>>:  CSS で動的な画像の 9 グリッド レイアウトを実装するためのサンプル コード

推薦する

Centos6.5 でのスーパーバイザーのアップグレード、インストール、および構成に関するチュートリアル

スーパーバイザー紹介Supervisor は、Python で開発されたクライアント/サーバー サー...

仮想マシンでXshell5をLinuxに接続する方法と障害の解決方法

かなり前に仮想マシンをインストールしましたが、ようやく Linux をインストールしました。マシンの...

MySQLで行または列をソートする方法

方法:説明: どちらも達成できません:方法1: sp_product から sp.productid...

JavaScript で配列遅延評価ライブラリを実装する方法

目次概要達成方法具体的な実装評価関数の終了を決定する生成関数の範囲変換関数マップフィルター割り込み機...

MySQL 5.7.18 のインストール中に MySQL サービスの起動に失敗する問題の解決策

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

nodejsとyarnをインストールし、Taobaoソースプロセスレコードを構成する

目次1. nodejsをダウンロードする2. ダブルクリックしてインストール3. グローバル npm...

YUM を使用して Linux (CentOS 7) に MySQL 5.7.18 をインストールする方法の詳細なチュートリアル

このプロジェクトでは MySQL を使用する必要があります。これまで Windows では常に確実に...

mysql 解凍パッケージの基本インストールチュートリアル

新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...

VMWARE で Centos8 仮想マシンをコピーすることによって発生する IP 損失の問題の解決策

VMwareでcentos8サービスをインストールしてコピーすると、次の問題が発生します。 コピー前...

Xshell にショートカット コマンドを追加する方法

便利なターミナル エミュレーターである Xshell は、開発者がホスト サーバーをリモート管理する...

MySQLのカバーインデックスに関する知識ポイントのまとめ

インデックスにクエリする必要があるすべてのフィールドの値が含まれている(またはカバーしている)場合、...

sql_mode を変更する際の MySQL エラーの解決方法

目次ERR 1067による殺人事件2番目の問題の原因はsql_modeです3. sql_modeを設...

ネイティブ JS で音楽プレーヤーを実装するためのサンプル コード

この記事では主に、次のように共有されるネイティブ JS 音楽プレーヤーのサンプル コードを紹介します...

MySQL カーソルの原理と使用例の分析

この記事では、例を使用して MySQL カーソルの原理と使用方法を説明します。ご参考までに、詳細は以...

CentOS 8 仮想マシンから Windows 10 ホスト フォルダーにアクセスする方法の簡単な分析

VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...