MySQL系列:查詢緩存參數

一、mysql查詢緩存概述

  1.基本概念

         查詢緩存的作用就是當查詢接收到一個和之前同樣的查詢,服務器將會從查詢緩存種檢索結果,而不是再次分析和執行上次的查詢。這樣就大大提高了性能,節省時間

        查詢緩存完全存儲在內存空間;通過哈希表,鍵值判斷其是否命中

        加速查詢,也會帶來開銷(多了一個步驟、對寫有消耗標記失效、內存的創建回收)

  2.查詢緩命中率

         通過查詢語句的哈希值判斷:哈希值考慮的因素包括查詢本身、要查詢的數據庫、客戶端使用協議版本...

         查詢語句任何字符上的不同,都會導致緩存不能命中;

  3.不能被緩存的查詢

        查詢中包含用戶自定義函數、存儲函數、用戶自定義變量、臨時表、mysql庫中系統表、或者包含列級權限的表、有着不確定值的函數(Now());

 

 

二、查詢緩存相關參數和配置

  1.查詢緩存變量

       MariaDB [(none)]> SHOW GLOBAL VARIABLES  LIKE '%query%';

wKioL1ciz13jneoyAAETtcZSREc701.png

    說明:

query_cache_min_res_unit查詢緩存中內存塊的最小分配單位;

                                                    較小值會減少浪費,但會導致更頻繁的內存分配操作;

                                                    較大值會帶來浪費,會導致碎片過多;

query_cache_limit能夠緩存的最大查詢結果;

                                     對於有着較大結果的查詢語句,建議在SELECT中使用SQL_NO_CACHE

query_cache_size 查詢緩存總共可用的內存空間;單位是字節,必須是1024的整數倍;

query_cache_typeON, OFF, DEMAND(明確指明緩存纔會緩存,否則全部不予緩存)

           query_cache_wlock_invalidate:如果某表被其它的連接鎖定,是否仍然可以從查詢緩存中返回結果;默認值爲OFF,表示可以在表被其它連接鎖定的場景中繼續從緩存返回數據;ON則表示不允許;

 

  2.查詢緩存相關的狀態變量

           MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Qcache%';

+---------------------------------------+-----------------+

| Variable_name                       | Value            |

+---------------------------------------+-----------------+

| Qcache_free_blocks              | 1                    |      空閒內存塊數,內存中可能不是連續的塊,多個組成全部大小

| Qcache_free_memory          | 16759688    |      空閒的內存空間

| Qcache_hits                            | 0                   |    命中次數

| Qcache_inserts                       | 0                  |    可緩存查詢語句被放入緩存的次數

| Qcache_lowmem_prunes     | 0                   |     內存太少,而使用LRU算法清理的次數

| Qcache_not_cached              | 0                  |    可緩存卻沒有被緩存的結果

| Qcache_queries_in_cache    | 0                   |    在當前緩存空間中被緩存下的語句個數

| Qcache_total_blocks              | 1                   |      總共有多少內存單元

+----------------------------------------+----------------+

        緩存命中率的評估公式:Qcache_hits/(Qcache_hits+Com_select)

         Com_selectmysql執行的查詢語句,緩存中命中是不會記錄的


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