MySQL緩存優(yōu)化方案總結(jié)
查詢(xún)緩存
想必大家應(yīng)該都知道這個(gè)相對(duì)比較雞肋的querycahce機(jī)制,從誕生以來(lái)就不怎么受人待見(jiàn),在mysql5.6將該機(jī)制默認(rèn)關(guān)閉,到了mysql8直接將他取消了。
查詢(xún)緩存顧名思義是將查詢(xún)的結(jié)果集緩存住,可以簡(jiǎn)單理解為整個(gè)sql為key,緩存sql的結(jié)果,每一次select查詢(xún)都會(huì)先檢查querycache是否有緩存,如果存在緩存的數(shù)據(jù)則直接返回,相比于磁盤(pán)讀取性能提升n倍。
聽(tīng)起來(lái)十分合理,但缺點(diǎn)也十分明顯:
- 基于sql來(lái)緩存嚴(yán)格到字節(jié)級(jí)別,只要sql中多一個(gè)空格就不會(huì)走緩存。對(duì)于線上環(huán)境比較生硬。
- 只適用于讀多遠(yuǎn)大于寫(xiě)少的場(chǎng)景,一有ddl預(yù)計(jì)緩存就會(huì)失效。
- 打開(kāi)查詢(xún)緩存后如果一條sql沒(méi)有命中會(huì)消耗額外的資源把結(jié)果集維護(hù)起來(lái),浪費(fèi)資源
所以一般的線上環(huán)境都不推薦使用這個(gè)機(jī)制。
表緩存
如果大家有背過(guò)mysql的八股文一定對(duì)innodb_buffer_pool_size這個(gè)參數(shù)不陌生,既然叫innodb_buffer說(shuō)明這是innodb引擎特有的參數(shù),負(fù)責(zé)緩存磁盤(pán)中的數(shù)據(jù)減少磁盤(pán)IO提升讀寫(xiě)速度。
由于innodb讀取數(shù)據(jù)的基本單位是頁(yè)并且使用B+樹(shù)索引結(jié)構(gòu)來(lái)組織數(shù)據(jù),每個(gè)索引頁(yè)通常包含多個(gè)數(shù)據(jù)行,數(shù)據(jù)行按照主鍵的順序進(jìn)行排序。通過(guò)主鍵索引,可以快速定位到目標(biāo)數(shù)據(jù)行所在的索引頁(yè),然后讀取對(duì)應(yīng)的磁盤(pán)頁(yè)。
每次讀取數(shù)據(jù)會(huì)連帶著整條數(shù)據(jù)頁(yè)被加載,好不容易消耗了資源讀磁盤(pán)拿出來(lái)的數(shù)據(jù)不能浪費(fèi),理所當(dāng)然的存在了buffer_pool里,比如第一次查詢(xún)select * from A where id = 1,在1附近的數(shù)據(jù)都被緩存到了buffer_pool中,下一次執(zhí)行select * from A where id = 2時(shí)就會(huì)從緩沖池里拿。
并且buffer_pool通過(guò)change_buffer來(lái)記錄增刪改對(duì)數(shù)據(jù)的變更操作,這樣就會(huì)極大的優(yōu)化查詢(xún)速度并節(jié)省性能,緩存失效也會(huì)根據(jù)LRU的機(jī)制去淘汰舊緩存。
從這次產(chǎn)品迭代升級(jí)的新環(huán)境中發(fā)現(xiàn),部署一個(gè)新的mysql容器可以注意調(diào)整一下innodb_buffer_pool_size對(duì)應(yīng)的值,默認(rèn)為128M,通過(guò)以下命令查看。
show variables like '%innodb_buffer_pool_size%';
一般我們可以調(diào)整為機(jī)器內(nèi)存的1/4,這個(gè)可以視情況而定,修改完之后會(huì)發(fā)現(xiàn)性能提升一大截。
ReadySet
先放一下官方文檔:
上面的都是MySQL自帶的緩存方案,這個(gè)組件是最近逛github的時(shí)候碰巧看到的中間件,一個(gè)高性能且輕量的mysql&pg數(shù)據(jù)庫(kù)緩存解決方案,無(wú)需額外代碼即可將最復(fù)雜的 SQL 讀取轉(zhuǎn)變?yōu)?strong>閃電般快速的查找。本質(zhì)上基于jdbc實(shí)現(xiàn)了一套服務(wù),對(duì)上層而言就是一個(gè)數(shù)據(jù)庫(kù),

由于我也是剛接觸不是特別了解只能簡(jiǎn)單聊一下,它本質(zhì)上是用一個(gè)數(shù)據(jù)流圖的機(jī)制去做的,所謂數(shù)據(jù)流圖按我理解就是一個(gè)快照,基于用戶(hù)的sql構(gòu)建一個(gè)快照,后續(xù)的增刪改語(yǔ)句與buffer pool思路一樣,在內(nèi)存中計(jì)算。
這個(gè)方案思路上有點(diǎn)類(lèi)似mysql中的查詢(xún)緩存和buffer_pool的整合版本,也是通過(guò)sql去緩存數(shù)據(jù),需要主動(dòng)通過(guò)使用CREATE CACHE FROMSQL擴(kuò)展,將查詢(xún)緩存在ReadySet中,通過(guò)SHOW CACHES查看所有緩存SQL,然后緩存的數(shù)據(jù)本質(zhì)上是構(gòu)造了快照,有數(shù)據(jù)更新會(huì)監(jiān)聽(tīng)binlog同步到快中中并支持最終一致性保持緩存一致,當(dāng)然會(huì)有一點(diǎn)點(diǎn)的數(shù)據(jù)延遲。
所以這類(lèi)中間件用著用著就會(huì)帶來(lái)巨大的內(nèi)存開(kāi)銷(xiāo),不過(guò)在BI類(lèi)似的平臺(tái)中可以試一試。
到此這篇關(guān)于MySQL緩存優(yōu)化方案總結(jié)的文章就介紹到這了,更多相關(guān)MySQL緩存優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中有哪些情況下數(shù)據(jù)庫(kù)索引會(huì)失效詳析
這篇文章主要給大家介紹了關(guān)于MySQL中有哪些情況下數(shù)據(jù)庫(kù)索引會(huì)失效的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
MySQL 數(shù)據(jù)庫(kù)常用命令 簡(jiǎn)單超級(jí)實(shí)用版
MySQL 數(shù)據(jù)庫(kù)常用命令,都是一些比較基礎(chǔ)的東西,更多的命令可以查看相關(guān)文章里面的文字。2010-07-07
MySQL時(shí)間類(lèi)型與Java日期時(shí)間類(lèi)對(duì)應(yīng)關(guān)系示例詳解
在開(kāi)發(fā)中數(shù)據(jù)庫(kù)和編程語(yǔ)言通常需要處理日期和時(shí)間數(shù)據(jù),MySQL數(shù)據(jù)庫(kù)和Java編程語(yǔ)言都提供了各種時(shí)間類(lèi)型來(lái)處理日期和時(shí)間數(shù)據(jù),這篇文章主要介紹了MySQL時(shí)間類(lèi)型與Java日期時(shí)間類(lèi)對(duì)應(yīng)關(guān)系的相關(guān)資料,需要的朋友可以參考下2025-08-08
MySQL數(shù)據(jù)表分區(qū)策略及優(yōu)缺點(diǎn)分析
項(xiàng)目開(kāi)發(fā)中,隨著數(shù)據(jù)庫(kù)數(shù)據(jù)量越來(lái)越大,單個(gè)表中數(shù)據(jù)太多,從而導(dǎo)致查詢(xún)速度變慢,而且由于表的鎖機(jī)制導(dǎo)致應(yīng)用操作也受到嚴(yán)重影響,出現(xiàn)了數(shù)據(jù)庫(kù)性能瓶頸。因此我們需要考慮分表與分區(qū),MySQL分表分區(qū)就是為了解決大數(shù)據(jù)量導(dǎo)致MySQL性能低下的問(wèn)題。2021-05-05
Mysql存儲(chǔ)二進(jìn)制對(duì)象數(shù)據(jù)問(wèn)題
這篇文章主要介紹了Mysql存儲(chǔ)二進(jìn)制對(duì)象數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
MySQL9.0(innovation)安裝及配置詳細(xì)教程
MySQL對(duì)于開(kāi)發(fā)者來(lái)說(shuō),不但體積小,速度也很可觀,最最重要的是開(kāi)源,所以非常受開(kāi)發(fā)者們的歡迎,這篇文章主要給大家介紹了關(guān)于MySQL9.0(innovation)安裝及配置的詳細(xì)教程,需要的朋友可以參考下2024-08-08
MySQL如何利用DCL管理用戶(hù)和控制權(quán)限
這篇文章主要介紹了MySQL如何利用DCL管理用戶(hù)和控制權(quán)限,幫助大家更好的理解和學(xué)習(xí)MySQL的使用,感興趣的朋友可以了解下2020-11-11

