清除MySQL 查詢緩存


MySQL 查詢緩存

在 SQL 調優的過程中,發現原本很慢的一條 SQL(將近 1 分鍾) 在第二次運行時, 瞬間就完成了(0.04sec)。

這是因為 MySQL 自帶的緩存機制,將查詢結果進行緩存,如果 table 數據未發生變化,再次使用同一條 SQL 進行查詢時,直接從上次的查詢結果緩存中讀取數據,而不是重新分析、執行 SQL。

如果 table 數據發生變化,所有與之相關的緩存都會被釋放刷新,這樣就不會出現數據臟讀問題。

手動選擇是否使用緩存查詢

為了避免緩存,可以在 SQL 查詢語句的字段前增加 SQL_NO_CACHE 關鍵字

如:

select * from t_user;

select SQL_NO_CACHE * from t_user;

反之,你也可以使用 SQL_CACHE 關鍵字,強制 MySQL 從緩存中讀取數據

select SQL_CACHE * from t_user;

MySQL 還提供了一種釋放全部緩存的方法:

reset query cache;

查看是否有查詢緩存(注意,只要數據庫擁有查詢緩存功能,這個 VALUE 就是 YES,無論查詢緩存是否啟用, MySQL 默認為啟用狀態):

SHOW VARIABLES LIKE 'have_query_cache';

 

MySQL 查詢緩存可以通過兩個變量來控制,query_cache_type 和 query_cache_size。

1. query_cache_type

SHOW VARIABLES LIKE 'query_cache_type';

  query_cache_type 包含三種狀態:

  • 0 or OFF 此時不會從緩存中讀取查詢數據
  • 1 or ON 表示除非聲明了 SELECT SQL_NO_CACHE,否則都會從緩存中讀取數據
  • 2 or DEMAND 表示所有語句都會從緩存中讀取,相當於所有查詢語句都使用了 SELECT SQL_CACHE

通過如下命令可以設置查詢緩存狀態(需要管理員權限),執行后,需要重啟 MySQL 服務才能生效。

SET GLOBAL query_cache_type = 1;

但是此命令會影響所有的使用此 MySQL 服務的 client。可以通過如下命令,關閉此客戶端的查詢緩存狀態,但是同樣需要重啟 server 后才能生效。

SET SESSION query_cache_type = OFF;

SHOW VARIABLES LIKE 'query_cache_type';

2. query_cache_size

SHOW VARIABLES LIKE 'query_cache_size';

query_cache_size 表示緩存大小,默認為 1M。如果設置為 0,則相當於 query_cache_size=OFF。

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM