MySQLがクエリキャッシュをキャンセルしたのはなぜですか?

この記事は「MySQLソリューションエンジニア」の公開番号から転載、著者:Xuyi Tao


MySQLには以前にクエリキャッシュ、クエリキャッシュがありました。8.0以降、このクエリキャッシュは使用されなくなりました。それをあきらめる理由は何ですか?この記事ではあなたを紹介します。

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

テクノロジーの進歩と時の試練により、MySQLエンジニアリングチームは、キャッシングを有効にすることの多くの利点がないことを発見しました。

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

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

ベンチマークテストを通じて、ほとんどのワークロードがクエリキャッシングを無効にするのに最適であることがわかりました(デフォルト設定は5.6):query_cache_type = 0

クエリキャッシングのメリットがあると思われる場合は、実際の条件に従ってテストしてください。

  • 書き込まれるデータが多いほど、メリットは少なくなります。

  • バッファプールに含まれるデータが多いほど、メリットは少なくなります

  • クエリが複雑でスキャン範囲が広いほど、メリットが大きくなります。

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

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


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

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

全文は終わりました。

MySQL8.0をお楽しみください:)

TeacherYeの「MySQLCoreOptimization」クラスがMySQL8.0にアップグレードされました。コードをスキャンして、MySQL8.0の練習の旅を始めてください。

おすすめ

転載: blog.csdn.net/n88Lpo/article/details/108395640