Mysql緩存


1.認識緩存

緩存是指可以進行告訴數據交換的存儲器。當cpu處理數據時,先到Cache中尋找,如果數據因之前的操作已經讀取而被暫緩存其中,就不需要再從隨機存取存儲起(RAM)中讀取數據.

2.為什么使用緩存

減少計算量,縮短請求流程(減少網絡的I/O或者硬盤I/O).

在web世界,每一層都會被緩存

1.底層CPU緩存,磁盤未見系統緩存.

2.應用層Zend虛擬機的變量緩存.

3.數據庫層有Table Cache、Thread Cache、Query Cache

等等.

以Mysql緩存舉例:

緩存有3個要素:命中率、緩存更新策略、緩存最大數據量.

1.命中率:請求緩存次數和緩存返回結果次數的比例。比例越高,證明緩存的使用率越高.

  Mysql提供一系列Global Status 記錄 Query Cache 當前狀態:

  Qcache_free_blocks:目前處於空閑狀態的Query Cache 中內容block數目.

  Qcache_free_memory:目前處於空閑狀態的Query Cache 內存總量.

  Qcache_hits:Query Cache命中次數.

  Qcache_inserts:向Query Cache中插入新的Query Cache次數,也就是沒有命中的次數.

  Qcache_lowmem_prunes:當Query Cache內存容量不夠,需要從中刪除舊的Query Cache以給新Cahce對象使用的次數.

  Qcache_not_cached:沒有被Cache的Sql數,包括無法被Cache的Sql以及由於query_cache_type設置而不會被Cache的Sql.

  Qcache_queries_in_cache:目前在Query Cache中的SQL數量.

  Qcache_total_blocks: Query Cache中的block數量.

2.緩存更新策略:

   在Mysql中,可以設置Query Cache所使用的總內存,MySQL會把默認可以進行緩存的SQL語句的結果集進行緩存,一旦內存塞滿后,就會剔除老的Query Cache對象。同時為了保證Query Cache中的內容與是實際數據絕對一致,當表中的數據有任何變化,包括新增、修改、刪除等,都會使所有引用到該表的SQL的Query Cache 失效.

   一般把緩存更新策略歸納為以下幾種:

  FIFO:最先進入緩存得數據在緩存空間不夠情況下(超出最大元素限制時)會被首先清理出去.

  LFU:最少使用的元素會被清理掉.這要求緩存的元素有hit屬性,在緩存空間不夠的情況下,hit值最小的將會被請出緩存.

  LRU:最近最少使用的元素被清理.緩存的元素有一個時間戳,當緩存容量滿了,而又需要騰出地方緩存新元素時,現有緩存元素中時間戳離當前時間最遠的元素將被清出緩存.

MySQL一般使用FIFO策略,隊列清除.

3.緩存最大數據量:

     在緩存中能處理元素的最大個數或所能使用的最大存儲空間。通常各種緩存機制都會對緩存最大數據量進行限定,可以是固定大小的存儲空間,集合個數,或者由操作系統所能分配和處理的存儲空間決定.

       MySQL的Query Cache緩存最大數據由query_cache_size參數決定,並且可以修改.而基於內存的Key-Value實施方案Memcached,其緩存最大數據量可使用內存由操作系統決定,默認為64MB,每次最大可申請內存為           2MB;

       超出緩存機制所允許的最大數據量系統會進行相應處理,一般由四種處理方式:

      1.停止緩存服務,所有緩存數據被清空.

      2.拒絕寫入,不再對緩存數據進行更新。

      3.根據緩存更新策略清除舊數據。

      4.在方式3基礎上,將淘汰的數據備份,騰訊新得空間.

       

 

 

 

  

    

 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM