innodb buffer pool和Qcache的緩存區別?
1、Qcacche緩存的是SQL語句及對應的結果集,緩存在內存,最簡單的情況是SQL一直不重復,那Qcache的命令率肯定是0;
2、buffer pool中緩存的是整張表中的數據,緩存在內存,SQL再變只要數據都在內存,那么命中率就是100%。
一、查詢緩存(QueryCache)
1、關於查詢緩存機制
開啟了緩存,會自動將查詢語句和結果集返回到內存,下次再查直接從內存中取;
查詢緩存會跟蹤系統中每張表,若表發生變化,則和該張表相關的所有查詢緩存全部失效,這是和buffer pool緩存機制很大的區別;
檢查查詢緩存時,MYSQL不會對SQL做任何處理,它精確的使用客戶端傳來的查詢,只要字符大小寫或注釋有點不同,查詢緩存就認為是不同的查詢;
任何一個包含不確定的函數(比如now()、curren_date())的查詢不會被緩存。
注意:
查詢緩存可改善性能,但是開啟查詢緩存對讀寫增加了額外開銷。
1、對於讀,在查詢前需先檢查緩存;
2、對於寫,寫入后需更新緩存。
一般情況下這些開銷相對較小,因此需要根據業務權衡是否開啟查詢緩存。
二、存儲引擎層-innodb buffer pool
buffer pool是innodb存儲引擎帶的一個緩存池,查詢數據的時候,它首先會從內存中查詢,如果內存中存在的話,直接返回,從而提高查詢響應時間。Buffer pool是設置的越大越好,一般設置為服務器物理內存的70%。
案例:
今天使用sysbench對mysql數據庫進行壓力測試,學習了一些知識:
以前沒有開啟query_cache的時候,sysbench壓測出來的結果中,select語句的TPS高達27299。然后今天開啟了query_cache緩存后發現select語句的TPS只有16000左右了,發現很是不正常,首先是確定buffer_pool進行了預熱,因此我就判斷改了配置文件參數引起的問題。因為我開啟了緩存,並且緩存設置在10G以上。根據上面所說的可能開啟緩存對mysql的讀寫性能產生了影響。
不過說實話加大quary_cache確實有助於查詢性能,上次就是統計總行數,第一次花了3分多鍾,后來1毫秒可就查詢處理結果了。
上面一些是我自己總結的,還有部分內容參考這個鏈接:https://www.aliyun.com/jiaocheng/1110925.html
