1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        DBA面試題:MySQL緩存池LRU算法做了哪些改進(jìn)?

        共 2253字,需瀏覽 5分鐘

         ·

        2024-04-11 13:23

        下圖是MySQL(MySQL5.7版本)體系架構(gòu)圖

        e8aff5d66984850d49d64940de53a20a.webp

        MySQL的InnoDb Buffer Pool 緩沖池是主內(nèi)存中的一個(gè)區(qū)域,用來(lái)緩存InnoDB在訪問(wèn)表和索引時(shí)的數(shù)據(jù)。對(duì)于頻繁使用的數(shù)據(jù)可以直接從內(nèi)存中訪問(wèn),從而加快處理速度。如果一臺(tái)服務(wù)器專用作MySQL數(shù)據(jù)庫(kù)使用時(shí),通常將70%~80%(具體看總內(nèi)存大小而定)的物理內(nèi)存空間分配給緩沖池。 緩沖池由多個(gè)緩沖池實(shí)例(innodb_buffer_pool_instances)組成,每個(gè)實(shí)例都有自己的鎖和數(shù)據(jù)結(jié)構(gòu),這樣可以在多線程環(huán)境中提高并發(fā)性能。緩沖池中的頁(yè)可以分為干凈頁(yè)和臟頁(yè),干凈頁(yè)是指與磁盤上的數(shù)據(jù)一致的頁(yè),而臟頁(yè)則是指已經(jīng)被修改但尚未寫回磁盤的頁(yè)。InnoDB會(huì)定期將臟頁(yè)刷新回磁盤,以確保數(shù)據(jù)的持久性 1.  LRU算法

        LRU(Least Recently Used,最近最少使用)是一種常見(jiàn)的緩存替換算法,通常用于管理緩存中的數(shù)據(jù)頁(yè)面。該算法基于一個(gè)簡(jiǎn)單的思想:當(dāng)緩存空間不足時(shí),將最近最少被訪問(wèn)的數(shù)據(jù)頁(yè)替換出去,以便為新的數(shù)據(jù)頁(yè)騰出空間。

        LRU算法維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu),通常是一個(gè)鏈表或者是一個(gè)數(shù)組,用于記錄數(shù)據(jù)頁(yè)面的訪問(wèn)順序。每當(dāng)一個(gè)數(shù)據(jù)頁(yè)面被訪問(wèn)時(shí),就將其移動(dòng)到鏈表或數(shù)組的頭部(或其他適當(dāng)位置),表示最近被訪問(wèn)。當(dāng)緩存空間不足時(shí),將鏈表或數(shù)組尾部的數(shù)據(jù)頁(yè)面替換出去,因?yàn)樗鼈兪亲罱钌俦辉L問(wèn)的。

        LRU算法的優(yōu)點(diǎn)是簡(jiǎn)單易實(shí)現(xiàn) ,并且通常能夠有效地利用緩存空間,保留最近被頻繁訪問(wèn)的數(shù)據(jù)頁(yè)面,從而提高緩存命中率,減少磁盤IO操作,提升系統(tǒng)性能。然而,LRU算法也存在一些 缺點(diǎn),比如需要維護(hù)一個(gè)有序的數(shù)據(jù)結(jié)構(gòu),當(dāng)緩存數(shù)據(jù)量非常大時(shí),可能會(huì)導(dǎo)致性能下降 。

        MySQL為了提高大批量數(shù)據(jù)讀取操作的效率,將緩沖池劃分為可以潛在地容納多行的頁(yè)面。為了提高緩存管理的效率,緩沖池被實(shí)現(xiàn)為頁(yè)面的鏈接列表;最近很少被使用的數(shù)據(jù)會(huì)使用LRU算法的變體從緩存中淘汰出去。 2.  MySQL中的LRU優(yōu)化 在MySQL中,針對(duì)傳統(tǒng)的LRU算法進(jìn)行了優(yōu)化,以解決全表掃描和預(yù)讀機(jī)制可能帶來(lái)的性能問(wèn)題。這種優(yōu)化被稱為“冷熱分離”,它將LRU鏈表分為兩部分:一部分用于存放冷數(shù)據(jù)(即最近加載但尚未被頻繁訪問(wèn)的數(shù)據(jù)頁(yè)),另一部分用于存放熱數(shù)據(jù)(即經(jīng)常被訪問(wèn)的數(shù)據(jù)頁(yè))。這樣,即使進(jìn)行全表掃描或預(yù)讀操作,也不會(huì)立即影響到那些熱數(shù)據(jù)頁(yè)的位置,從而保持了緩沖池的高命中率和性能。

        5e91a32f93f47afac6411e1e2c2c770b.webp

        默認(rèn)情況下,優(yōu)化后的LRU算法將5/8的緩沖池空間用于存放熱數(shù)據(jù),3/8的空間用于存放冷數(shù)據(jù),冷熱區(qū)域的邊界叫做midpoint區(qū)。

        當(dāng)InnoDB將一個(gè)頁(yè)面讀入緩沖池時(shí),它最初會(huì)將其插入midpoint區(qū)(即冷數(shù)據(jù)區(qū)的頭部)。此后頁(yè)面可能被讀取,因?yàn)樗怯脩舭l(fā)起的操作(例如SQL查詢或作為InnoDB自動(dòng)執(zhí)行的預(yù)讀操作的一部分)。

        而訪問(wèn)冷數(shù)據(jù)區(qū)中的頁(yè)面時(shí)會(huì)將此頁(yè)面變“熱”,進(jìn)而將其移到熱數(shù)據(jù)區(qū)的頭部。如果頁(yè)面是由于用戶發(fā)起的操作而被讀取的,則首次訪問(wèn)會(huì)立即發(fā)生,并且頁(yè)面會(huì)變?yōu)椤盁帷薄H绻?yè)面是由于預(yù)讀操作而被讀取的,則首次訪問(wèn)不會(huì)立即訪問(wèn),并且在頁(yè)面被驅(qū)逐之前可能也永遠(yuǎn)不會(huì)被訪問(wèn)。

        隨著數(shù)據(jù)庫(kù)的運(yùn)行,未被訪問(wèn)的緩沖池中的頁(yè)面通過(guò)向列表的尾部移動(dòng)而“老化”。隨著其他頁(yè)面被設(shè)置為新頁(yè)面,冷數(shù)據(jù)區(qū)中的頁(yè)面都會(huì)老化。隨著頁(yè)面被插入midpoint,冷數(shù)據(jù)區(qū)中的頁(yè)面也會(huì)老化。最終,保持未使用的頁(yè)面被推向冷數(shù)據(jù)區(qū)的尾部并被驅(qū)逐。

        3. 小結(jié)

        MySQL使用LRU(最近最少使用)算法來(lái)管理其InnoDB存儲(chǔ)引擎的緩沖池(Buffer Pool),因?yàn)檫@種算法能有效地維護(hù)緩存頁(yè)的使用頻率和順序。LRU算法通過(guò)淘汰長(zhǎng)時(shí)間未被訪問(wèn)的數(shù)據(jù)頁(yè),確保緩沖池中存儲(chǔ)的是最可能被再次訪問(wèn)的數(shù)據(jù),從而提高數(shù)據(jù)檢索的效率。

        在實(shí)際應(yīng)用中,MySQL對(duì)傳統(tǒng)的LRU算法進(jìn)行了優(yōu)化,以解決全表掃描和預(yù)讀機(jī)制可能帶來(lái)的性能問(wèn)題。這種優(yōu)化被稱為冷熱分離,它將LRU鏈表分為兩部分:一部分用于存放冷數(shù)據(jù)(即最近加載但尚未被頻繁訪問(wèn)的數(shù)據(jù)頁(yè)),另一部分用于存放熱數(shù)據(jù)(即經(jīng)常被訪問(wèn)的數(shù)據(jù)頁(yè))。這樣,即使進(jìn)行全表掃描或預(yù)讀操作,也不會(huì)立即影響到那些熱數(shù)據(jù)頁(yè)的位置,從而保持了緩沖池的高命中率和性能

        5f59030932e06e2e727c3d818cf8712b.webp往期精彩回顧

        1.   MySQL高可用之MHA集群部署

        2.   mysql8.0新增用戶及加密規(guī)則修改的那些事

        3.  比hive快10倍的大數(shù)據(jù)查詢利器-- presto

        4.  監(jiān)控利器出鞘:Prometheus+Grafana監(jiān)控MySQL、Redis數(shù)據(jù)庫(kù)

        5.  PostgreSQL主從復(fù)制--物理復(fù)制

        6.  MySQL傳統(tǒng)點(diǎn)位復(fù)制在線轉(zhuǎn)為GTID模式復(fù)制

        7 .  MySQL敏感數(shù)據(jù)加密及解密

        8 .  MySQL數(shù)據(jù)備份及還原(一)

        9 .  MySQL數(shù)據(jù)備份及還原(二)

        3b0fc5c1036c65d626cdd873834c1ca7.webp掃碼關(guān)注     



        瀏覽 28
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产理论视频| 成人小视频在线观看| 密臀福利导航| 日本中文字幕中文翻译歌词| 成人做爰黄A片免费看陈冠| 天天色图片| 成年人免费电影| 亚洲性爱在线| 亚洲伦乱| 欧美在线综合|