為什麼要關閉 MySQL Query Cache

MySQL 的 Query Cache 在某些環境是有一定作用的,但大部份的情況都沒什麼作用,而且反而會影響效能。

當 MySQL 執行 SELECT 查詢時,會將結果放到 Query Cache 內,當下次執行相同的 SELECT 查詢時,不會在資料庫查詢結果,而會在 Query Cache 取得,從而提高執行效率。

這樣聽起來不錯,但實際上 Query Cache 的機制有一個問題,就是當資料表被更動後,儲存在 Query Cache 的 Cache 會失效,MySQL 會在背後將 Cache 刪除及重新建立 Cache。更改資料表其實很常發生,不單單是 TRUNCATE, ALTER TABLE, DROP TABLE 這類更改資料表結構的語句,連 INSERT, UPDATE, DELETE 也會使儲存在 Query Cache 的 Cache 失效。所以如果資料表是經常更新的話,Query Cache 反而會使系統的工作量加重。


但如果你的資料表及裡面的資料很少更動,那麼開啟 Query Cache 確實有一定作用。

至於要完整關閉 Query Cache,需要同時將 MySQL 的 query_cache_type 及 query_cache_size 同時設定為 0, 以下是關閉方法:

方法是開啟 my.cnf:

# vi /etc/my.cnf

在 [mysqld] 段落,找到 query_cache 的設定,如果沒有便自行加入,改成這樣:

query_cache_type=0
query_cache_size=0

修改完後需要重新啟動 MySQL 才會生效:

# systemctl restart mysql


Leave a Reply