MySQL 內部處處皆緩存,等什么時候看了MySQL的源碼,再來詳細的分析緩存的是如何利用的。這部分主要將各種顯式的緩存優化:
1、查詢緩存優化
查詢緩存不僅將查詢語句結構緩存起來,還將查詢結果緩存起來。一段時間內,如果是同樣的SQL,則直接從緩存中讀取結果,提高查找數據的效率。但當緩存中的數據與硬盤中的數據不一致時,緩存就會失效。
| mysql> show variables like '%query_cache%';+------------------------------+---------+| Variable_name | Value |+------------------------------+---------+| have_query_cache | YES || query_cache_limit | 1048576 || query_cache_min_res_unit | 4096 || query_cache_size | 1048576 || query_cache_type | OFF || query_cache_wlock_invalidate | OFF |+------------------------------+---------+ | 
have_query_cache 是否支持查詢緩存。
query_cache_limit 如果某條select語句的結果集大小超過了querycachelimit的值時,這個結果集將不會被添加到查詢緩存。
query_cache_min_res_unit 查詢緩存是以塊來申請內存空間的,每次申請的塊大小為設定值。4K 是非常一個合理的值,不必修改。
query_cache_size 查詢緩存的大小。
query_cache_type 查詢緩存的類型,值有 0(OFF)、1(ON)、2(DEMOND)。OFF表示查詢緩存是關閉的。ON 表示查詢總是先到查詢緩存中去查找,除非在select 語句中包含sql_no_cache選項。 DEMOND 表示不適用緩存,除非在select 語句中包含sql_cache選項。
query_cache_wlock_invalidate 該參數用于設置行級排它鎖與查詢緩存之間的關系,默認為為0(OFF),表示施加行級排它所的同時,該表的所有查詢緩存依然有效。如果設置為1(ON),表示事假行級排它鎖的同時,該表的所有查詢緩存失效。
查看查詢緩存的命中率
| mysql> show status like 'Qcache%';+-------------------------+---------+| Variable_name | Value |+-------------------------+---------+| Qcache_free_blocks | 1 || Qcache_free_memory | 1031360 || Qcache_hits | 0 || Qcache_inserts | 0 || Qcache_lowmem_prunes | 0 || Qcache_not_cached | 0 || Qcache_queries_in_cache | 0 || Qcache_total_blocks | 1 |+-------------------------+---------+ | 
查看當前緩存的狀態信息:
Qcache_free_blocks
表示查詢緩存中處以重現狀態的內存塊數(碎片數量)。如果Qcache_free_blocks 的值較大,則意味著查詢緩存中碎片比較多,表明查詢結果集較小,此時可以減小query_cache_min_res_unit的值。使用flush query cache 會對緩存中的若干個碎片進行整理,從而得到一個比較大的空閑塊。緩存碎片率 = Qcache_free_blocks/ Qcache_total_blocks * 100%
新聞熱點
疑難解答