mysql優化3
- 2020 年 1 月 9 日
- 筆記
1.5 query_cache_size (1)簡介: 查詢緩存簡稱QC,使用查詢緩衝,mysql將查詢結果存放在緩衝區中,今後對於同樣的select語句(區分大小寫),將直接從緩衝區中讀取結果。 一個sql查詢如果以select開頭,那麼mysql服務器將嘗試對其使用查詢緩存。 註:兩個sql語句,只要想差哪怕是一個字符(列如大小寫不一樣;多一個空格等),那麼這兩個sql將使用不同的一個cache。 (2)判斷依據 mysql> show status like "%Qcache%"; +————————-+———+ | Variable_name | Value | +————————-+———+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 1031360 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 2002 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 1 | +————————-+———+ 8 rows in set (0.00 sec)
———————狀態說明——————– Qcache_free_blocks:緩存中相鄰內存塊的個數。如果該值顯示較大,則說明Query Cache 中的內存碎片較多了,FLUSH QUERY CACHE會對緩存中的碎片進行整理,從而得到一個空閑塊。 註:當一個表被更新之後,和它相關的cache blocks將被free。但是這個block依然可能存在隊列中,除非是在隊列的尾部。可以用FLUSH QUERY CACHE語句來清空free blocks Qcache_free_memory:Query Cache 中目前剩餘的內存大小。通過這個參數我們可以較為準確的觀察出當前系統中的Query Cache 內存大小是否足夠,是需要增加還是過多了。 Qcache_hits:表示有多少次命中緩存。我們主要可以通過該值來驗證我們的查詢緩存的效果。數字越大,緩存效果越理想。 Qcache_inserts:表示多少次未命中然後插入,意思是新來的SQL請求在緩存中未找到,不得不執行查詢處理,執行查詢處理後把結果insert到查詢緩存中。這樣的情況的次數越多,表示查詢緩存應用到的比較少,效果也就不理想。當然系統剛啟動後,查詢緩存是空的,這很正常。 Qcache_lowmem_prunes:多少條Query 因為內存不足而被清除出Query Cache。通過「Qcache_lowmem_prunes」和「Qcache_free_memory」相互結合,能夠更清楚的了解到我們系統中Query Cache 的內存大小是否真的足夠,是否非常頻繁的出現因為內存不足而有Query 被換出。這個數字最好長時間來看;如果這個數字在不斷增長,就表示可能碎片非常嚴重,或者內存很少。(上面的free_blocks和free_memory可以告訴您屬於哪種情況) Qcache_not_cached:不適合進行緩存的查詢的數量,通常是由於這些查詢不是 SELECT 語句或者用了now()之類的函數。 Qcache_queries_in_cache:當前Query Cache 中cache 的Query 數量; Qcache_total_blocks:當前Query Cache 中的block 數量;。
(3)配置示例
mysql> show variables like '%query_cache%' ; +——————————+———+ | Variable_name | Value | +——————————+———+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 1048576 | | query_cache_type | OFF | | query_cache_wlock_invalidate | OFF | +——————————+———+ 6 rows in set (0.00 sec)
mysql>
——————-配置說明——————————- 以上信息可以看出query_cache_type為off表示不緩存任何查詢 各字段的解釋: query_cache_limit:超過此大小的查詢將不緩存 query_cache_min_res_unit:緩存塊的最小大小,query_cache_min_res_unit的配置是一柄」雙刃劍」,默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據查詢,就容易造成內存碎片和浪費。 query_cache_size:查詢緩存大小 (註:QC存儲的最小單位是1024byte,所以如果你設定了一個不是1024的倍數的值,這個值會被四捨五入到最接近當前值的等於1024的倍數的值。) query_cache_type:緩存類型,決定緩存什麼樣的查詢,注意這個值不能隨便設置,必須設置為數字,可選項目以及說明如下: 如果設置為0,那麼可以說,你的緩存根本就沒有用,相當于禁用了。 如果設置為1,將會緩存所有的結果,除非你的select語句使用SQL_NO_CACHE禁用了查詢緩存。 如果設置為2,則只緩存在select語句中通過SQL_CACHE指定需要緩存的查詢。
修改/etc/my.cnf,配置完後的部分文件如下: query_cache_size=256M query_cache_type=1