mysql共享快取數查詢 37 mysql查詢快取

2021-10-19 19:09:05 字數 1753 閱讀 8250

mysql查詢快取用於儲存mysql查詢語句返回的完整結果,被命中時,mysql會立即返回結果,省去解析、優化和執行等操作

如何檢查快取??

mysql儲存結果於快取中:

把select語句本身做hash計算,計算的結果作為key,查詢結果作為value

什麼樣的語句不會被快取?

查詢語句中有一些不確定資料時,不會快取;例如now  ,current_time();一般來說,如果查詢中包含使用者自定義函式、儲存函式、使用者變數、臨時表、mysql庫中系統表、或者任何包含許可權的表,一般都不會快取

快取會帶來額外開銷

1、每個查詢都會先檢查是否命中

2、查詢結果要先快取

mysql> show global variables like 'query_cache%';

query_cache_limit                        單個快取物件的最大值,超出時則不予快取;手動使用sql_no_cache可以人為的避免嘗試快取返回超出此引數限定值得語句

query_cache_min_res_unit         儲存快取的最小記憶體塊 (query_cache_size-qcache_free_memory)/qcache_queries_in_cache能夠獲得乙個理想的值

query_cache_size                        總空間。單位為位元組,大小必須為1024的整數倍。mysql啟動時,會一次分配並立即初始化這裡指定大小的記憶體空間;這意味著,如果修改此大小,會清空快取並重新初始化的

query_cache_type                        查詢快取型別;是否開啟快取功能,開啟方式有三種,demand:意味著select語句明確使用sql_cache選項才會快取

query_cache_wlock_invalidate    如果某個表被其他使用者連線鎖住了,是否仍然從快取中返回結果,off表示返回

如何判斷命中率:

分為次數和位元組命中率

mysql> show global status like 'qcache%';

qcache_free_blocks            空閒塊數

qcache_free_memory        空閒空間

qcache_hits                        命中次數

qcache_inserts                    向快取空間中插入的快取的次數

qcache_lowmem_prunes    記憶體太小,修剪記憶體的次數

qcache_not_cached            沒被快取的個數

qcache_queries_in_cache    快取中快取的查詢個數

qcache_total_blocks            總塊數

碎片整理 flush query_cache

清空快取 reset query_cache

計算命中率:

show global status where vaiable_name='qcache_hits' or variable_name='com_select';

qcache_hits/(qcache_hits+com_select)

快取優化思路

1.批量寫入,而非多次單個寫入

2.快取空間不宜過大,因為大量快取同事失效時會導致伺服器假死

3.必要時,使用sql_cache和sql_no_cache手動控制快取。

4.對寫密集型的應用場景來說,禁用快取反而提高效能。

mysql資料快取查詢 Mysql查詢快取

查詢快取 mysql提供了一種快取型別,會快取整個select查詢結果。mysql查詢快取儲存查詢返回的完整結果。當查詢命中該快取,mysql會立即返回結果,跳過了解析 優化和執行階段。以下兩種情況不能被快取 頻繁更新 修改的的表,所有快取資料都會失效,mysql查詢快取會跟蹤查詢中涉及的表,如果這...

mysql 查詢快取

show variables like cache my.cnf設定 mysql慢日誌 mysql有乙個功能就是可以log下來執行的比較慢的sql語句,預設是沒有這個log的,為了開啟這個功能,要修改my.cnf或者在mysql啟動的時候加入一些引數。如果在my.cnf裡面修改,需增加如下幾行 lo...

mysql查詢快取

查詢快取不開啟 r mysql query select username from user where signup date curdate 開啟查詢快取 today date y m d r mysql query select username from user where signup...