Reasons why MySQL cancelled Query Cache

Reasons why MySQL cancelled Query Cache

MySQL previously had a query cache, Query Cache. Starting from 8.0, this query cache is no longer used. So what is the reason for abandoning it? This article will introduce it to you.

MySQL query cache is a cache of query results. It compares queries starting with SEL to the hash table and, if there is a match, returns the result of the previous query. When matching, the query must be matched byte by byte. For example, SELECT * FROM t1; is not equal to select * from t1;. In addition, some uncertain query results cannot be cached, and any modification to the table will invalidate all caches of these tables. Therefore, the best scenario for query caching is read-only, especially complex queries that need to examine millions of rows and return only a few. If your query meets such a characteristic, enabling query cache will improve your query performance.

As technology progressed and time went by, the MySQL engineering team found that there were not many benefits to enabling caching.

First, the effect of query cache depends on the cache hit rate. Only queries that hit the cache can be improved, so its performance cannot be predicted.

Second, another big problem with the query cache is that it is protected by a single mutex. On a server with many cores, a large number of queries can result in a lot of mutex contention.

Benchmarking has found that most workloads are best served by disabling the query cache (the default for 5.6): query_cache_type = 0

If you think you would benefit from query caching, test it accordingly.

  • The more data you write, the less benefit you get
  • The more data you hold in the buffer pool, the less benefit you get.
  • The more complex the query, the larger the scan range, the greater the benefit

Another reason why MySQL 8.0 cancels query cache is that research shows that the closer the cache is to the client, the greater the benefit. For more information about this study, please refer to https://proxysql.com/blog/scaling-with-proxysql-query-cache/

The following image is from the URL above:

In addition, MySQL 8.0 has added new tools for performance intervention. For example, you can now use the query rewrite plug-in to insert optimizer hint statements without changing the application. Alternatively, there are third-party tools like ProxySQL that can act as an intermediate cache.

For the above reasons, MySQL 8.0 no longer supports query caching. If you upgrade from 5.7 to 8.0, consider using query rewrite or other caches.

The full text is over.

The above are the details of why MySQL canceled Query Cache. For more information about MySQL Query Cache, please pay attention to other related articles on 123WORDPRESS.COM!

You may also be interested in:
  • MySQL Query Cache Graphical Explanation
  • MySQL optimization query_cache_limit parameter description
  • MySQL cache startup method and parameter details (query_cache_size)
  • Misunderstandings about MySQL query_cache
  • Analysis of MySQL Query Cache Principle
  • MySQL query_cache_type parameter and usage details

<<:  Web interview Vue custom components and calling methods

>>:  WeChat applet realizes linkage menu

Recommend

Detailed explanation of HTML table inline format

Inline format <colgroup>...</colgroup>...

Analysis of the reasons why MySQL field definitions should not use null

Why is NULL so often used? (1) Java's null Nu...

How to run top command in batch mode

top command is the best command that everyone is ...

Introduction to Apache deployment of https in cryptography

Table of contents Purpose Experimental environmen...

Overview and Introduction to Linux Operating System

Table of contents 1. What is an Operating System ...

Tutorial on installing MySQL under Linux

Table of contents 1. Delete the old version 2. Ch...

WeChat Mini Program Basic Tutorial: Use of Echart

Preface Let’s take a look at the final effect fir...

How to implement draggable components in Vue

This article shares with you how to implement dra...

Methods and steps to upgrade MySql5.x to MySql8.x

Several Differences Between MySQL 5.x and MySQL 8...

Record a slow query event caused by a misjudgment of the online MySQL optimizer

Preface: I received crazy slow query and request ...

Docker installation and configuration image acceleration implementation

Table of contents Docker version Install Docker E...

MySQL uses limit to implement paging example method

1. Basic implementation of limit In general, the ...

HTML table tag tutorial (46): table footer tag

The <tfoot> tag is used to define the style...

Detailed installation and use of virtuoso database under Linux system

I've been researching some things about linke...