MySQL クエリ キャッシュとバッファ プール

MySQL クエリ キャッシュとバッファ プール

1. キャッシュ - クエリキャッシュ

次の図は、MySQL 公式サイトから提供されています: MySQL アーキテクチャ システム図。

よく参照されるクエリ キャッシュは、下の図の Cache 部分です。

MySQL がサーバー層とストレージ エンジン層の 2 つの部分に分かれている場合、キャッシュはサーバー層に配置されます。

さらに、次の点も知っておく必要があります。

SQL ステートメントが MySQL サーバーに送信されると、MySQL サーバーはまずクエリ キャッシュをチェックして、その SQL ステートメントが以前に実行されたことがあるかどうかを確認します。以前に実行されたことがある場合、前回の実行のクエリ結果がキーと値の形式でクエリ キャッシュに保存されます。キーは SQL ステートメントであり、値はクエリ結果です。このプロセスをクエリ キャッシュと呼びます。

探しているデータがクエリ キャッシュにない場合、MySQL は後続のロジックを実行し、ストレージ エンジンを通じてデータを取得します。クエリ キャッシュはセッションの共有キャッシュとなり、すべてのセッションで共有されます。

クエリ キャッシュの欠点:

テーブルに SQL 更新がある限り、テーブルのクエリ キャッシュは無効になります。したがって、ビジネスにおけるテーブル CRUD の割合が同様の場合、クエリ キャッシュはアプリケーションのスループット効率に影響を与える可能性があります。

パラメータ query_chache_type=demand を設定することで、クエリ キャッシュを無効にすることができます。また、MySQL 8.0 バージョンでは、クエリ キャッシュ モジュールが削除されました。

そのため、ご自身の状況に応じて機能を無効にする必要があるかどうかを検討することができます。

バッファプール

繰り返しになりますが、MySQL がサーバー層とストレージ エンジン層の 2 つの部分に分かれている場合、バッファー プールはストレージ エンジン層にあります。

実際、接続プールであろうとキャッシュプールであろうと、XXX プールである限り、高速化のために設計されていることは誰もが知っています。たとえば、データの読み取りを高速化するために、オペレーティング システムのファイル システムは、毎回非効率的なランダム ディスク IO に対してバッファ書き込みメカニズムを設計します。

バッファ プールは、データの読み取りを高速化するために MySQL ストレージ エンジンによって設計されたバッファリング メカニズムです。下の図の灰色の部分が BufferPool のマインドマップです。 (手書き文字は本物で、とても美しいです!)

以上がMySQLクエリキャッシュとバッファプールの詳細です。MySQLクエリキャッシュとバッファプールの詳細については、123WORDPRESS.COMの他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • MySQL Innodbの主な機能挿入バッファ
  • MySQLのバッファプールの詳細な説明
  • mysql 最適化のための重要なパラメータ key_buffer_size table_cache
  • mysql key_buffer_size設定を最適化する
  • mysql read_buffer_size の適切な設定は何ですか?
  • MySQL ソートが中止されました: ソート メモリが不足しています。サーバーのソート バッファ サイズを増やすことを検討してください。
  • MySQL ソースコードから Innodb バッファヒット率の計算を分析する
  • PHP での MySQL 操作バッファの使用法の詳細な説明
  • Mysql の最適化とチューニングにおける 2 つの重要なパラメータ: table_cache と key_buffer
  • mysql key_buffer_sizeパラメータの最適化設定
  • mysqldump によるバッファプール汚染の調査
  • MySQL 結合バッファの原理

<<:  HTMLフォーム要素の詳しい解説(パート1)

>>:  C++ TpeScriptシリーズのジェネリックについて

推薦する

docker-maven-pluginはイメージをパッケージ化し、プライベートウェアハウスにアップロードします。

目次1. docker-maven-pluginの紹介2. 環境とソフトウェアの準備3. デモ例3....

CSS グリッドレイアウトで列にアイテムを埋め込む方法

n 個のアイテムがあり、これらのアイテムをグリッド レイアウトの列に並べ替える必要があるとします。列...

JavaScriptプロトタイプチェーンを理解する

目次1. プロトタイプとプロトタイプチェーンの平等関係を理解する2: プロトタイプとプロトタイプ チ...

Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要

目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...

Zabbix Agent2を使用してOracleデータベースを監視する方法

概要zabbix バージョン 5.0 以降では、zabbix-agent2 という新しい機能が追加さ...

MySQL 派生テーブル(Derived Table)の簡単な使用例分析

この記事では、例を使用して、MySQL 派生テーブルの簡単な使用方法を説明します。ご参考までに、詳細...

Vue で動的なスタイルを実現するためのさまざまな方法のまとめ

目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...

Tomcat を使用して IntelliJ IDEA によってデプロイされたプロジェクトの場所はどこですか?

IntelliJ IDEA が Tomcat を使用して Javaweb プロジェクトをデプロイし...

Linux LVM 論理ボリューム構成プロセス (作成、増加、削減、削除、アンインストール) の詳細な説明

Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...

JS+Canvas でダイナミックな時計効果を実現

参考までに、Canvas をベースにしたダイナミッククロックのデモを用意しました。具体的な内容は次の...

Dockerでコンテナを作成するときのディレクトリ権限

昨日プロジェクトを書いていた時に、MySQL の派生版である Percona を使う必要があったので...

Dockerでパラメータ変数を外部から指定する方法

この記事は主にDockerでパラメータ変数を外部から指定する方法を紹介します。この記事のサンプルコー...

mysql5.7.19 winx64 解凍版のインストールと設定のチュートリアル

mysql 5.7.19 winx64解凍版のインストールチュートリアルを収録しました。具体的な内容...

Docker で FastDFS をデプロイする方法

Dockerにfastdfsをインストールするディレクトリをマウント-v /e/fdfs/トラッカー...

HTML で複数のフォームのテキスト ボックスを揃える方法

フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...