使用MySQL查詢緩存

簡介

    MySQL的查詢緩存是MySQL內置的一種緩存機制,能夠針對sql進行緩存。好比咱們發送select * from mysql.user這麼一個查詢,MySQL首先檢索內存中是否有數據而且數據是否過時,若是沒有數據或者數據已通過期就去數據庫中查找,若是有數據而且沒有過時就直接返回數據。對於sql的匹配規則很是簡單,就是字符串的比較,只要字符串相同,那麼就認爲是同一個查詢。這裏的字符串相同並非表示sql語義相同,而是查詢的sql字符串相同,空格也不行。mysql

 

查詢緩存配置

查詢緩存的開啓在my.cnf配置文件中,修改查詢緩存相關參數就能夠完成。(RDS在管理後臺進行配置)sql

參數解釋數據庫

query_caceh_type

是否開啓查詢緩存緩存

0 表示不開啓查詢緩存
1 表示始終開啓查詢緩存(不要緩存使用sql_no_cache) 
2 表示按需開啓查詢緩存 (須要緩存使用 sql_cache)。性能

query_cache_size 給緩存分配的最大內存空間 
query_cache_limit 指定單個查詢可以使用的緩存大小
query_cache_wlock_invalidate

針對myisam存儲引擎(因此採用非myisam引擎的就不須要考慮了),設置當有write lock在某個table上面的時候,讀請求是要等待write lock釋放資源以後再查詢仍是容許直接從query cache中讀取結果,默認是OFF,能夠直接從query cache中取得結果。spa

 

查看緩存狀態

咱們可使用 show global status like 'Qcache%'; 來查看查詢緩存的使用狀態。對象

參數解釋排序

Qcache_free_blocks 目前還處於空閒狀態的 Query Cache 中內存 Block 數目
Qcache_free_memory 目前還處於空閒狀態的 Query Cache 內存總量
Qcache_hits 命中次數
Qcache_inserts 向 Query Cache 中插入新的 Query Cache 的次數,也就是沒有命中的次數
Qcache_lowmem_prunes 當 Query Cache 內存容量不夠,須要從中刪除老的 Query Cache 以給新的 Cache 對象使用的次數
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 數量

 

單句SQL緩存

配置文件的query_caceh_type參數有三個選項。內存

其中0 表示不開啓查詢緩存,也就是說任何SQL都沒法使用查詢緩存。ci

1 表示始終開啓查詢緩存,也就是說全部的SQL都會被緩存。當咱們認爲某一項業務的SQL會頻繁變化(例如利用用戶座標排序),那麼咱們可使用sql_no_cache指定此SQL不進入緩存,從而減小性能開銷。例如:select sql_no_cache * from user;

2 表示按需開啓查詢緩存,也就是說全部的SQL在不指定狀況下都不會被緩存。只有使用sql_cache的SQL纔會被緩存。例如:select sql_cache * from user;

相關文章
相關標籤/搜索