MySQL查詢快取

來源:互聯網
上載者:User

標籤:情況   variable   工作   current   禁用   res   man   eset   大量   

                        MySQL查詢快取

                                        尹正傑

著作權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

 

一.什麼是MySQL查詢快取  用於儲存MySQL查詢語句返回的完整結果,被命中時,MySQL會立即返回結果,省去解析、最佳化和執行等操作。把select語句本身做hash計算,計算的結果作為key,查詢結果作為value,如果查詢語句被快取命中,就直接將value返回。  查詢語句中有一些不確定資料時,不會緩衝;例如now(),current_time();一般來說,如果查詢中包含使用者自訂函數、儲存函數、使用者變數、暫存資料表、mysql庫中系統資料表、或者任何包含許可權的表,一般都不會緩衝。  二.緩衝會帶來額外開銷  1>.每個查詢都會先檢查是否命中;  2>.查詢結果要先緩衝;  當伺服器有多顆CPU時,且並發量的非常大時,這個時候我們就要考慮各個CPU掙奪緩衝的記憶體空間的問題,也就是說當這種情況出現時,我們需要去衡量緩衝的效率問題。當然你還要結合以上兩點進行判斷:  三.查詢快取相關變數
 1 mysql> show global variables like ‘query_cache%‘; 2 +------------------------------+---------+ 3 | Variable_name                | Value   | 4 +------------------------------+---------+ 5 | query_cache_limit            | 1048576 | 6 | query_cache_min_res_unit     | 4096    | 7 | query_cache_size             | 0       | 8 | query_cache_type             | ON      | 9 | query_cache_wlock_invalidate | OFF     |10 +------------------------------+---------+11 5 rows in set (0.00 sec)12 13 mysql> 14 15 1>.query_cache_type:16     查詢快取類型;是否開啟緩衝功能,開啟方式有三種{ON|OFF|DEMAND},其中DEMAND意味著select語句明確使用sql_cache選項才會緩衝喲。17 2>.query_cache_size:18     緩衝使用的總空間。單位為位元組,大小必須為1024的整數倍。mysql啟動時,會一次分配並立即初始化這裡指定大小的記憶體空間;這意味著,19 如果修改此大小,會清空所有緩衝並重新初始化的。因此不建議修改此大小,最好是一開始就設計好,此記憶體不宜過大。20 3>.query_cache_min_res_unit:21     儲存緩衝的最小記憶體塊 (query_cache_size-Qcache_free_memory)/Qcache_queries_in_cache能夠獲得一個理想的值22 4>.query_cache_limit:23     單個緩衝對象的最大值,超出時則不予緩衝;手動使用SQL_NO_CACHE可以人為的避免嘗試緩衝返回超出此參數限定值得語句24 5>.query_cache_wlock_invalidate:25     如果某個表被其他使用者串連鎖住了,是否仍然從緩衝中返回結果,OFF表示返回。 
  四.如何判斷命中率  MySQL查詢快取的命中率分為次數和位元組命中率。狀態變數是MySQL統計查詢的結果,伺服器變數是我們可以提前設定的值,可以提前定義它的工作屬性,mysql狀態變數是在工作時不斷的統計資料的值(比如快取命中的頻率等等)。我們可以通過以下命令進行查詢:
 1 mysql> show global status like ‘Qcache%‘; 2 +-------------------------+-------+ 3 | Variable_name           | Value | 4 +-------------------------+-------+ 5 | Qcache_free_blocks      | 0     | 6 | Qcache_free_memory      | 0     | 7 | Qcache_hits             | 6     | 8 | Qcache_inserts          | 0     | 9 | Qcache_lowmem_prunes    | 0     |10 | Qcache_not_cached       | 0     |11 | Qcache_queries_in_cache | 0     |12 | Qcache_total_blocks     | 0     |13 +-------------------------+-------+14 8 rows in set (0.01 sec)15 16 mysql> 17 1>.Qcache_free_blocks          #指的是空閑塊數,指的是系統分配給MySQL進程的緩衝總大小空間中還沒有使用的空間。18 2>.Qcache_hits                #指的是叫用次數 19 3>.Qcache_inserts            #向緩衝空間中插入的緩衝的次數20 4>.Qcache_free_memory          #空閑空間,指的是還沒有被作業系統分配出去的記憶體空間。21 5>.Qcache_lowmem_prunes        #記憶體太小,修剪記憶體的次數22 6>.Qcache_not_cached          #沒被緩衝的個數23 7>.Qcache_queries_in_cache     #緩衝中緩衝的查詢個數24 8>.Qcache_total_blocks         #總塊數,指的是系統分配給MySQL進程的緩衝總大小空間25 9>.補充知識:26 a>.flush query_cache           #磁碟重組27 b>.reset query_cache           #清空緩衝
  六.計算命中率
 1 mysql> show global status where Variable_name=‘Qcache_hits‘ OR Variable_name=‘Com_Select‘; 2 +---------------+-------+ 3 | Variable_name | Value | 4 +---------------+-------+ 5 | Com_select    | 158   | 6 | Qcache_hits   | 4    | 7 +---------------+-------+ 8 2 rows in set (0.00 sec) 9 10 mysql> 11 12 1>.總共查詢了Com_select 次數,我們這裡是158次;13 2>.快取命中了Qcache_hits次數,我們這裡是命中了4次;14   因此我們可以計算次數的命中率:   Qcache_hits/(Qcache_hits+Com_Select),當然這隻是次數的命中率,我們想要查詢位元組的命中率的方法就很困難了。因此,也可以參考另外一個指標,命中和寫入的比率,即Qcache_hits/Qcache_inserts的值,此比值如果能大於3:1.則表明緩衝也是有效,能達到10:1,為比較理想的情況。如果不能達到這個參數,建議是關閉緩衝。

 

七.緩衝最佳化思路  1>.批量寫入,而非多次單個寫入  2>.緩衝空間不宜過大,因為大量緩衝同事失效時會導致伺服器假死  3>.必要時,使用sql_CACHE和sql_no_cache手動控制緩衝。  4>.對寫密集型的應用情境來說,禁用緩衝反而提高效能。     

MySQL查詢快取

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.