MySQLがクエリキャッシュをキャンセルした理由

MySQLがクエリキャッシュをキャンセルした理由

MySQL には以前、クエリ キャッシュ (Query Cache) がありました。8.0 以降では、このクエリ キャッシュは使用されなくなりました。では、これを廃止する理由は何でしょうか?この記事ではそれについて紹介します。

MySQL クエリ キャッシュは、クエリ結果のキャッシュです。 SEL で始まるクエリをハッシュ テーブルと比較し、一致する場合は前のクエリの結果を返します。一致させる場合、クエリはバイトごとに一致させる必要があります。たとえば、SELECT * FROM t1; は select * from t1; と同じではありません。また、不確実なクエリ結果の一部はキャッシュできず、テーブルを変更すると、これらのテーブルのすべてのキャッシュが無効になります。したがって、クエリ キャッシュの最適なシナリオは読み取り専用であり、特に数百万行を調べて数行のみを返す必要がある複雑なクエリではこれが当てはまります。クエリがこのような特性を満たしている場合、クエリ キャッシュを有効にするとクエリのパフォーマンスが向上します。

テクノロジーが進歩し、時間が経つにつれて、MySQL エンジニアリング チームは、キャッシュを有効にしてもメリットがあまりないことに気付きました。

まず、クエリ キャッシュの効果はキャッシュ ヒット率に依存します。キャッシュにヒットしたクエリのみが改善できるため、そのパフォーマンスを予測することはできません。

2 番目に、クエリ キャッシュのもう 1 つの大きな問題は、単一のミューテックスによって保護されていることです。多数のコアを持つサーバーでは、クエリの数が多くなると、ミューテックスの競合が多発する可能性があります。

ベンチマークの結果、ほとんどのワークロードはクエリキャッシュを無効にすることで最適に処理されることがわかりました(5.6のデフォルト):query_cache_type = 0

クエリ キャッシュが役立つと思われる場合は、それに応じてテストしてください。

  • 書き込むデータが増えるほど、得られるメリットは少なくなります
  • バッファ プールに保持するデータが増えるほど、得られるメリットは少なくなります。
  • クエリが複雑になるほど、スキャン範囲が広くなり、メリットも大きくなります。

MySQL 8.0 がクエリ キャッシュをキャンセルするもう 1 つの理由は、調査により、キャッシュがクライアントに近いほどメリットが大きくなることが示されているためです。この調査の詳細については、https://proxysql.com/blog/scaling-with-proxysql-query-cache/ を参照してください。

以下の画像は上記の URL からのものです。

さらに、MySQL 8.0 ではパフォーマンス介入のための新しいツールが追加されました。たとえば、クエリ書き換えプラグインを使用して、アプリケーションを変更せずにオプティマイザヒント文を挿入できるようになりました。あるいは、中間キャッシュとして機能できる ProxySQL などのサードパーティ ツールもあります。

上記の理由により、MySQL 8.0 ではクエリ キャッシュがサポートされなくなりました。5.7 から 8.0 にアップグレードする場合は、クエリ リライトまたはその他のキャッシュの使用を検討してください。

全文は以上です。

以上がMySQLがQuery Cacheをキャンセルした理由の詳細です。MySQL Query Cacheの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。

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

<<:  MySQL IFNULL判定問題の解決方法

>>:  Web インタビュー Vue カスタム コンポーネントと呼び出しメソッド

推薦する

CSS 要素を表示および非表示にする 9 つの方法

Web ページの制作では、要素の表示と非表示は非常に一般的な要件です。この記事では、要素を表示したり...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.12のインストールと設定方法を記録してみんなで共有します。 1. インストール1...

TypeScript 開発のための 6 つの実用的なヒント

目次1. 開発前にエンティティの種類を決定する2. インターフェースをリクエストするときは、使用する...

win10にmysql 8.0.18-winx64をインストールする詳細な手順

1. まず公式ウェブサイトにアクセスしてMySQLインストールパッケージをダウンロードします参考: ...

Docker クロスサーバー通信オーバーレイソリューション (パート 1) Consul 単一インスタンス

目次シナリオタスクアイデア分析するコンセプトと選択ちょっとしたテスト環境説明予防実践テスト引用シナリ...

Vueは画像のズームとドラッグをサポートするリッチテキストエディタを統合しています

必要:ビジネス要件によると、写真をアップロードできる必要があり、アップロードされた写真はモバイル端末...

CSS継承方法

次の背景画像を持つ div があるとします。 次の反射効果を作成します。 方法はたくさんありますが、...

Alibaba Cloud ESC サーバー シングルノード MySQL の Docker デプロイメント

1. msyqlの高速バージョンをダウンロードする docker pull hub.c.163.co...

Three.js が Facebook Metaverse 3D ダイナミック ロゴ効果を実現

目次背景メタバースとは何ですか?成果を達成するトライアル 1: THREE.TorusGeometr...

Kylin 4.0.2 (Ubuntu) でブート パーティションを拡張するプロセスの紹介

目次序文1. 新しいパーティションを準備する2. ブートパーティションをコピーする3. fstabフ...

MySQL ページングの制限パラメータの簡単な例

Mysqlページングの2つのパラメータ ユーザー制限 1,2 から * を選択 1 は検索する最初の...

Element-ui の組み込み 2 つのリモート検索 (ファジークエリ) の使用方法の説明

問題の説明フロントエンドリモート検索やファジークエリと呼ばれる種類のクエリがあります。 Ele.me...

vue3 カスタムディレクティブの詳細

目次1. カスタム指示の登録1.1. グローバルカスタム指示1.2. ローカルカスタム指示2. カス...

HTML テーブル マークアップ チュートリアル (38): ヘッダーの境界線の色属性 BORDERCOLOR

テーブルを美しくするために、ヘッダーに異なる境界線の色を設定できます。基本的な構文<TH 境界...

MySQL ストアドプロシージャとストアドファンクションの詳細な説明

1 ストアドプロシージャ1.1 ストアドプロシージャとは何かストアド プロシージャは、特定の機能を実...