查詢緩存
- 優點:(1)對於某些頻繁出現的查詢語句,可以減少I/O。
- 缺點:(1)查詢緩存需要佔用一定的內存。(2)每次查詢執行前都要先檢查緩存,故不一定是有利的。
- 緩存未命中的原因:(1)查詢不在緩存中 (2)緩存失效 (3) 查詢中包含不確定的函數,比如current_date。因此如果查詢希望使用緩存,就直接使用當時時間的字面量,比如‘2018-1-29’這種即可。
- 緩存失效:(1)在InnoDB中,如果一個事務對錶進行了修改,那在事務提交前,緩存都會失效。 (2)產生了大量碎片,因爲緩存使用的分配算法是最佳分配算法(最合適的大小分給它,易產生碎片,可以通過選擇合適的塊大小來減少這種情況)
- 前面提到每次查詢都會先檢查緩存。如果需要緩存的查詢很少,可以將query_cache_type設置爲demand,然後對需要緩存的查詢後面添加sql_cache。這樣可以更細粒度的控制緩存的使用
- 如果寫入操作很多(前面提到修改表的時候會使緩存失效),這個時候可以禁用緩存,並將緩存大小query_cache_size設置爲0,這樣就不會佔用內存。
- 基於上一條,如果兩者都要,那麼就讓寫操作成批量的執行,而不是逐個執行。
調優參數
- query_cache_type:既是會話級變量也是全局性變量。有on/off/demand三個屬性
- query_min_cache_res_unit:設置分配緩存最小塊大小。
- query_cache_limit:限制緩存存儲的最大結果,超過不會被緩存