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 グリッド レイアウトを実装するためのサンプル コード

推薦する

MYSQLクエリデータの結果に自動的に番号を付ける方法

序文実際、クエリ中に結果に番号が付けられるこのような状況に遭遇したことは一度もありません。同僚が転職...

VUE無限レベルツリーデータ構造表示の実装

目次コンポーネントの再帰呼び出しレンダリングメソッドの使用プロジェクトに取り組んでいると、左側のメニ...

スタイリッシュなウェブページデザインを作成する方法(グラフィックチュートリアル)

「壮大」という言葉は、おそらく現代のデザイナーが最も聞きたくない言葉でしょう。デザイナー:「デザイン...

HTML+JS に基づくシンプルな年齢計算ツールの実装

目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...

CentOS での MySQL ログイン 1045 問題を解決する

アプリケーション全体を CentOS にデプロイする必要があるため、当然ながらデータベース操作は不可...

Vuex のコアコンセプトと基本的な使用法の詳細な説明

目次導入始めるインストール①直接ダウンロードする方法②CND法③NPM方式④糸法NPMインストールの...

Node.js でのブレークポイント再開の実装

序文通常のビジネスニーズ: 写真、Excel などをアップロードします。結局のところ、数 MB のサ...

Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

目次1. コンポーネント切り替え方式方法1: v-ifとv-elseを使用する方法 2: 組み込みコ...

Azure Container Registry を使用してイメージを保存する際の問題

Azure Container Registry は、Docker Registry 2.0 仕様に...

dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明

問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...

JavaScript フォーム検証の例

HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...

Flexboxレイアウトの最もシンプルなフォーム実装

フレキシブル レイアウト (Flexbox) はますます人気が高まっており、CSS レイアウトの記述...

MySQL 結合テーブルクエリの基本操作 左結合のよくある落とし穴

概要中小規模のプロジェクトでは、特にレポートを作成するときに、結合テーブル クエリが非常に一般的な操...

js を使用して 2 つの HTML ウィンドウ間で通信する方法

シナリオ: ページAがページBを開くと、ページBで操作した後、ページAは変更されたデータを同期する必...

Pythonの関数知識についての簡単な説明

目次関数パラメータの2つの主要なカテゴリ位置パラメータ可変長パラメータ名前空間要約する関数パラメータ...