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シリーズのジェネリックについて

推薦する

回転灯効果を実現するWeChatアプレットの例

序文日常の開発では、テキストの水平スクロール効果(一般にカルーセルと呼ばれる)によく遭遇します。これ...

MySQL 8.0 オンライン DDL クイック列追加の概要

目次問題の説明MySQLオンラインDDLで列を追加する従来の方法01 コピー方法02 インプレースメ...

JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...

Linuxはデータディスクがアンインストールされ、新しいカスタムイメージを作成できることを確認します。

カスタムイメージに関するよくある質問データディスクを表示するにはどうすればいいですか? df コマン...

MySQLクライアント認証後の接続失敗の問題に対する完璧なソリューション

MySQL 環境をローカル (192.168.1.152) にデプロイし、リモート クライアント 1...

dockerコンテナにvimをインストールするソリューション

目次物語の始まりvimをインストールし、hadoop-hive.envを編集します。不注意で回避しま...

jQueryはキャンバスタグを使用して検証コードを描画します

<canvas> 要素は、クライアント側のベクター グラフィックス用に設計されています。...

フロントエンドブラウザのフォントサイズが12px未満のソリューション

序文最近プロジェクトに取り組んでいたとき、UI デザインのフォント サイズは 10 ピクセルでした。...

Docker-compose ネットワークの詳細な例

今日は Docker でのネットワーク設定を試し、後で忘れないようにプロセスを記録しました。 (シス...

Centos7 に MySQL 8.0.23 をインストールする手順 (初心者レベル)

まず、MySQL とは何かを簡単に紹介します。簡単に言えば、データベースはデータを格納するための倉庫...

MySQLのビューの詳細な説明

ビュー: MySQL のビューはテーブルと多くの類似点があります。ビューも複数のフィールドと複数のレ...

MySQL における UNION と UNION ALL の基本的な使い方

データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セッ...

Docker コンテナに TensorRT をインストールする際の問題

Ubuntu にインストールされているバージョンをアンインストールします。 sudo apt-get...

pagodaを使用してionCube拡張機能をインストールする方法

1. まずパゴダを設置するインストール要件: Python バージョン: 2.6/2.7 (Pago...

SQL と MySQL のステートメント実行順序の分析

今日、問題が発生しました: MySQL の insert into、update、delete ステ...