mysql優化3

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章