mysql sql_cache緩存使用


有如下規則,如果數據表被更改,那么和這個數據表相關的全部Cache全部都會無效,並刪除之。這里“數據表更改”包括: INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE等。舉個例子,如果數據表posts訪問頻繁,那么意味着它的很多數據會被QC緩存起來,但是每一次posts數據表的更新,無論更新是不是影響到了cache的數據,都會將全部和posts表相關的cache清除。如果你的數據表更新頻繁的話,那么Query Cache將會成為系統的負擔。有實驗表明,糟糕時,QC會降低系統13%[1]的處理能力。

Query Cache相關參數:

query_cache_size QC占用空間大小,通過將其設置為0關閉QC功能
query_cache_type 0表示關閉QC;1表示正常緩存;2表示SQL_CACHE才緩存
query_cache_limit 最大緩存結果集
query_cache_min_res_unit 手冊上說,QC會按照這個值分配緩存block的大小。
Qcache_lowmem_prunes 這是一個狀態變量(show status),當緩存空間不夠需要  

                                  釋放舊的緩存時,該值會自增。

Qcache_hits                –表示sql在緩存中直接得到結果,不需要再去解析

have_query_cache          –查詢緩存是否可用
query_cache_limit           –可緩存具體查詢結果的最大值
query_cache_size           –查詢緩存的大小
query_cache_type           –阻止或是支持查詢緩存
set global query_cache_size = 600000; –設置緩存內存
set session query_cache_type = ON; –開啟查詢緩存
Qcache_free_blocks 緩存中相鄰內存塊的個數。數目大說明可能有碎片。

FLUSH QUERY CACHE 會對緩存中的碎片進行整理,從而得到一個空閑塊。
Qcache_free_memory 緩存中的空閑內存。
Qcache_hits 每次查詢在緩存中命中時就增大。
Qcache_inserts 每次插入一個查詢時就增大。命中次數除以插入次數就是不中比率;

                      用1 減去這個值就是命中率。在上面這個例子中,

                      大約有 87% 的查詢都在緩存中命中。
Qcache_lowmem_prunes 緩存出現內存不足並且必須要進行清理以便為更多查詢提供空

                           間的次數。這個數字最好長時間來看;如果這個數字在不斷增長,就

                           表示可能碎片非常嚴重,或者內存很少。(上面的 free_blocks 和

                           free_memory 可以告訴您屬於哪種情況)。
Qcache_not_cached 不適合進行緩存的查詢的數量,通常是由於這些查詢不是

                             SELECT 語句。
Qcache_queries_in_cache 當前緩存的查詢(和響應)的數量。
Qcache_total_blocks 緩存中塊的數量。
 

1 通過配置實現:只對“數據變動少,select多”的table開啟cache功能。(這個能否通過配置實現,還需要調查,在mysql手冊中似乎沒有提到)

2 配置query_cache_type,同時改寫程序。

query_cache_type 0 代表不使用緩沖, 1 代表使用緩沖,2 代表根據需要使用。

設置 1 代表緩沖永遠有效,如果不需要緩沖,就需要使用如下語句:

SELECT SQL_NO_CACHE * FROM my_table WHERE …

如果設置為 2 ,需要開啟緩沖,可以用如下語句:

SELECT SQL_CACHE * FROM my_table WHERE …

So,只要把query_cache_type設置為2,然后在需要提高select速度的地方,使用:

SELECT SQL_CACHE * FROM…

【mysql cache調試筆記】

1 可以使用下列命令開啟mysql的select cache功能:

SET GLOBAL query_cache_size = 102400000;

因為當query_cache_size默認為0時,是不開啟cache功能的。

2 調試:

查看cache的設置:

show variables like ‘%query_cache%’;

性能監控:

show status like ‘%Qcache%’;

3 mysql cache的清理:

可以使用FLUSH QUERY CACHE語句來清理查詢緩存碎片以提高內存使用性能。該語句不從緩存中移出任何查詢。

RESET QUERY CACHE語句從查詢緩存中移出所有查詢。FLUSH TABLES語句也執行同樣的工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM