1. 程式人生 > >Mysql快取命中率

Mysql快取命中率

歡迎關注本人公眾號


MySQL快取命中率,網上說法不一,下面我說下我的看法,大家輕拍:

總的select查詢數等於com_select(沒命中) + qcache_hits(命中) + 解析錯誤的查詢。

再來看看Com_select變數:

[sql] view plaincopyprint?
  1. mysql> show global status like'Com_select';  
  2. +---------------+-------+
  3. | Variable_name | Value |  
  4. +---------------+-------+
  5. | Com_select    | 46    |  
  6. +---------------+-------+

com_select等於qcache_inserts(快取失效) + qcache_not_cache(沒有快取) + 許可權檢查錯誤的查詢。

因此,

Mysql的查詢快取命中率 ≈ qcache_hits / (qcache_hits + com_select)

查詢快取變數:

[sql] view plaincopyprint?
  1. mysql> show global status like'QCache%'
  2. +-------------------------+----------+
  3. | Variable_name           | Value    |  
  4. +-------------------------+----------+
  5. | Qcache_free_blocks      | 1        |  
  6. | Qcache_free_memory      | 18856920 |  
  7. | Qcache_hits             | 3        |  
  8. | Qcache_inserts          | 20       |  
  9. | Qcache_lowmem_prunes    | 0        |  
  10. | Qcache_not_cached       | 26       |  
  11. | Qcache_queries_in_cache | 0        |  
  12. | Qcache_total_blocks     | 1        |  
  13. +-------------------------+----------+

因此本例中的查詢快取命中率 ≈ 3/(3+46) = 6.12%

查詢快取變數含義:

Qcache_free_blocks

目前還處於空閒狀態的 Query Cache中記憶體 Block 數目,數目大說明可能有碎片。FLUSH QUERY CACHE會對快取中的碎片進行整理,從而得到一個空閒塊。

Qcache_free_memory

快取中的空閒記憶體總量。

Qcache_hits

快取命中次數。

Qcache_inserts

快取失效次數。

Qcache_lowmem_prunes

快取出現記憶體不足並且必須要進行清理以便為更多查詢提供空間的次數。這個數字最好長時間來看;如果這個數字在不斷增長,就表示可能碎片非常嚴重,或者記憶體很少。(上面的free_blocks和free_memory可以告訴您屬於哪種情況)。

Qcache_not_cached

不適合進行快取的查詢的數量,通常是由於這些查詢不是SELECT語句以及由於query_cache_type設定的不會被Cache的查詢。

Qcache_queries_in_cache

當前快取的查詢(和響應)的數量。

Qcache_total_blocks

快取中塊的數量。