Mysql緩存中innodb_buffer_pool與Qcache的區別


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


免責聲明!

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



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