首頁 > 軟體

MySQL查詢快取優化範例詳析

2022-10-28 14:04:41

一、概述

在日常使用資料庫中,80%的資料請求都是查詢,而餘下的20%是更新或者增加資料。如何提升查詢效能,便是提高資料庫處理能力的關鍵。

二、查詢優化內容

1、查詢快取的原理

查詢的路線圖:

快取SELECT操作或預處理查詢的結果集和SQL語句,當有新的SELECT語句或預處理查詢語句請求,先去查詢快取,判斷是否存在可用的記錄集,判斷標準:與快取的SQL語句,是否完全一樣,區分大小寫。

2、查詢快取的優缺點

優點

不需要對SQL語句做任何解析和執行,當然語法解析必須通過在先,直接從Query Cache中獲得查詢結果,提高查詢效能

缺點

查詢快取的判斷規則,不夠智慧,也即提高了查詢快取的使用門檻,降低效率查詢快取的使用,會增加檢查和清理Query Cache中記錄集的開銷

3、不能應用查詢快取的內容

  • 查詢語句中加了SQL_NO_CACHE引數
  • 查詢語句中含有獲得值的函數,包含:自定義函數,如:NOW() ,CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ()等
  • 對系統資料庫的查詢:mysql、information_schema 查詢語句中使用SESSION級別變數或儲存過程中的區域性變數
  • 查詢語句中使用了LOCK IN SHARE MODE、FOR UPDATE的語句,查詢語句中類似SELECT …INTO 匯出資料的語句
  • 對臨時表的查詢操作
  • 存在警告資訊的查詢語句
  • 不涉及任何表或檢視的查詢語句
  • 某使用者只有列級別許可權的查詢語句
  • 事務隔離級別為Serializable時,所有查詢語句都不能快取

4、查詢快取相關的伺服器變數

  • query_cache_min_res_unit:查詢快取中記憶體塊的最小分配單位,預設4k,較小值會減少浪費,但會導致更頻繁的記憶體分配操作,較大值會帶來浪費,會導致碎片過多,記憶體不足
  • query_cache_limit:單個查詢結果能快取的最大值,單位位元組,預設為1M,對於查詢結果過大而無法快取的語句,建議使用SQL_NO_CACHE
  • query_cache_size:查詢快取總共可用的記憶體空間;單位位元組,必須是1024的整數倍,最小值40KB,低於此值有警報
  • query_cache_wlock_invalidate:如果某表被其它的對談鎖定,是否仍然可以從查詢快取中返回結果,預設值為OFF,表示可以在表被其它對談鎖定的場景中繼續從快取返回資料;ON則表示不允許
  • query_cache_type:是否開啟快取功能,取值為ON, OFF, DEMAND

5、SELECT語句的快取控制

  • SQL_CACHE:顯式指定儲存查詢結果於快取之中
  • SQL_NO_CACHE:顯式查詢結果不予快取
  • query_cache_type引數變數
  • query_cache_type的值為OFF或0時,查詢快取功能關閉
  • query_cache_type的值為ON或1時,查詢快取功能開啟,SELECT的結果符合快取條件即會快取,否則,不予快取,顯式指定SQL_NO_CACHE,不予快取,此為預設值
  • query_cache_type的值為DEMAND或2時,查詢快取功能按需進行,顯式指定SQL_CACHE的SELECT語句才會快取;其它均不予快取

6、查詢快取相關的狀態變數

show gloable status like 'Qcache%' ;

7、查詢的優化的檢查路線

8、命中率和記憶體使用率估算

查詢快取中記憶體塊的最小分配單位query_cache_min_res_unit :

(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache

查詢快取命中率 :

Qcache_hits / ( Qcache_hits + Qcache_inserts ) * 100%

查詢快取記憶體使用率:

(query_cache_size – qcache_free_memory) / query_cache_size * 100%

9、版本差異

在早期版本mysql均支援快取,但是隨著redis等記憶體型高效能的快取技術興起,mysql已經拋棄自己的快取功能,mysql8.0以後不再支援快取功能。

三、總結

MYSQL的快取優化在早期版本可以起到一定的優化作用,最新的版本不再支援,快取的功能而由其他的快取服務來承擔。

到此這篇關於MySQL查詢快取優化的文章就介紹到這了,更多相關MySQL查詢快取優化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com