最近在使用MySQL的過程中遇到了一個很奇怪的問題,就是當我執行一個update語句時,會一直卡住。
UPDATE table_name SET column_name=value WHERE condition;
我一開始以為是語句有問題,因此我對語句進行了調整,把condition的范圍縮小,但還是沒用。
然后我嘗試著用命令行來執行這個語句,這時候發現提示“Waiting for query cache lock”,看來是MySQL的查詢緩存出了問題。
于是我嘗試著把查詢緩存關掉,把my.cnf文件中的query_cache_size設置為0,并重啟了MySQL服務。
[mysqld] query_cache_size=0
這個時候再次執行update語句,就沒有卡住的情況了。
根據我的測試,如果你使用MySQL的查詢緩存,當你更新一個表的數據時,這個表的查詢緩存會被鎖住。而如果你同時有其他查詢也要使用這個緩存,那么這個查詢就會一直卡住,直到緩存被釋放。
雖然關閉查詢緩存不是最好的解決方案,但如果你的應用場景不需要查詢緩存或者緩存命中率很低的話,關閉查詢緩存還是一個不錯的選擇。
上一篇mysql有兩個端口