亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL?InnoDB引擎的緩存特性詳解

 更新時間:2022年09月13日 08:41:31   作者:Amos01  
這篇文章主要介紹了MySQL?InnoDB引擎的緩存特性詳解的相關(guān)資料,需要的朋友可以參考下

1. 背景

對于各種用戶數(shù)據(jù)、索引數(shù)據(jù)等各種數(shù)據(jù)都是需要持久化存儲到磁盤,然后以“頁”為單位進行讀寫。

相對于直接讀寫緩存,磁盤IO的成本相當(dāng)高昂。

對于讀取的頁面數(shù)據(jù),并不是使用完就釋放掉,而是放到緩沖區(qū),因為下一次操作有可能還需要讀區(qū)該頁面。

對于修改過的頁面數(shù)據(jù),也不是馬上同步到磁盤,也是放到緩沖區(qū),因為下一次有可能還會修改該頁面的數(shù)據(jù)。

但是緩存的空間是有大小限制的,不可能無限擴充。

對于緩沖區(qū)的數(shù)據(jù),需要有合理的頁面淘汰算法,將未來使用概率較小的頁面釋放或者同步到磁盤,

給當(dāng)下需要存放到緩存的頁面騰出位置。

2. 存儲器性能差異

寄存器:CPU暫存指令、數(shù)據(jù)的小型存儲區(qū)域,速度快,容量小。

CPU高速緩存(CPU Cache):用于減少CPU訪問內(nèi)存所需平均時間的部件。

內(nèi)存:用于暫時存放CPU中的運算數(shù)據(jù),以及與硬盤等外部存儲器交換的數(shù)據(jù)。

硬盤:分為固態(tài)硬盤(SSD)和機械硬盤(HHD),是非易失性存儲器。

下圖是各種緩存器的價格和性能差距,

從下圖可以看出,SSD的隨機訪問延時在微妙級別,而內(nèi)存的的隨機訪問延時在納秒級別,內(nèi)存比SSD大概快1000倍左右。

3. Buffer Pool

一個緩沖池(緩沖池)是向操作系統(tǒng)申請的一塊內(nèi)存空間,這塊內(nèi)存空間由多個chunk組成,每個chunk均包含多個控制塊和對應(yīng)的緩沖頁。

chunk是向操作系統(tǒng)申請內(nèi)存的最小單位,緩沖頁大小與InnoDB表空間使用的頁面大小一致。

Buffer Pool的示意圖如下

每一個控制塊都對應(yīng)一個緩沖頁,控制塊包含該緩沖頁所屬的表空間編號、頁號、在Buffer Pool中的地址、鏈表結(jié)點信息等等。

當(dāng)剛讀取一個頁面時,需要知道緩沖區(qū)有哪些空閑頁面,當(dāng)修改過后緩沖頁后,需要記錄該緩沖頁需要持久化到磁盤,

當(dāng)緩沖區(qū)沒有空閑頁面了,需要有頁面淘汰算法來將緩沖頁移出緩沖區(qū),

以上涉及到Free鏈表、Flush鏈表、LRU鏈表,下面注意說明。

4. Free鏈表

Free鏈表是由空閑的緩沖頁對應(yīng)的控制塊組成的鏈表,通過Free鏈表就獲取到空閑的緩沖頁及其在緩沖區(qū)中的地址。

每當(dāng)需要從磁盤加載一個頁面到緩沖區(qū)時,從該Free鏈表取出一個控制塊結(jié)點,從Free鏈表移除該結(jié)點,并加入LRU鏈表。

如果這個緩沖區(qū)頁面被修改過,那么會被加入到Flush鏈表中。

5. Flush鏈表

如果一修改緩沖頁的數(shù)據(jù)之后就刷新到磁盤,這種頻繁的IO操作勢必影響程序等整體性能。

試想一下,先后修改1000次同一緩沖區(qū)頁面的一字節(jié)數(shù)據(jù),每次修改都刷新到磁盤,與修改1000次后再將最終結(jié)果刷新磁盤,節(jié)省了999次刷新磁盤的操作。

因此,當(dāng)頁面的數(shù)據(jù)被修改之后,需要將改頁面放到Flush鏈表,排隊等候?qū)懭氪疟P。

這既可以減少在用戶進程中刷新磁盤的次數(shù),也從整體上減少了磁盤IO到次數(shù)。

6. LRU鏈表

內(nèi)存空間有限,不可能將所有數(shù)據(jù)都緩存在內(nèi)存當(dāng)中,因此需要有一定的算法將內(nèi)存中頁面淘汰掉(修改過的頁面持久化到磁盤)。

LRU(Least Recently Used)鏈表主要用于輔助實現(xiàn)內(nèi)存頁面淘汰,故名思義,最先淘汰的是最近最少使用的緩沖頁。

LRU鏈表的結(jié)果如下圖所示

將LRU鏈表分為young區(qū)域和old區(qū)域。

對于初次加載到緩沖區(qū)的頁面,會放到LRU鏈表old區(qū)域的頭部,這主要避免了預(yù)讀的頁面被放到了LRU鏈表的首部。

當(dāng)?shù)诙卧L問緩沖頁且時間間隔超過innodb_old_blocks_time(默認(rèn)1s)時,才將該頁面移動到LRU鏈表的首部。

進一步,為了避免頻繁的移動鏈表結(jié)點,當(dāng)某個緩沖頁已經(jīng)在young區(qū)域的前3/4時,則不會移動該結(jié)點到首部。

7. 其它

如何定位頁面是否被緩沖呢?

表空間號和頁號可以唯一識別緩沖頁,因此InnoDB引擎建立了以表空間號+頁號為key,以緩沖頁控制塊地址為value的哈希表,

從而快速判斷頁面是否被緩沖,快速定位到數(shù)據(jù)所在地址。

到此這篇關(guān)于MySQL InnoDB引擎的緩存特性詳解的文章就介紹到這了,更多相關(guān)MySQL InnoDB 緩存特性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql觸發(fā)器語法解讀(附帶簡單實用例子)

    Mysql觸發(fā)器語法解讀(附帶簡單實用例子)

    這篇文章主要介紹了Mysql觸發(fā)器語法解讀(附帶簡單實用例子),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Mysql5.5安裝配置方法及中文亂碼的快速解決方法

    Mysql5.5安裝配置方法及中文亂碼的快速解決方法

    這篇文章主要介紹了Mysql5.5安裝配置方法以及mysql5.5中文亂碼的快速解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • mysql自動插入百萬模擬數(shù)據(jù)的操作代碼

    mysql自動插入百萬模擬數(shù)據(jù)的操作代碼

    這篇文章主要介紹了mysql自動插入百萬模擬數(shù)據(jù)的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

    mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

    這篇文章主要給大家介紹了關(guān)于mysql如何利用參數(shù)sql_safe_updates限制update/delete范圍的相關(guān)資料文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • MySQL使用UNIQUE實現(xiàn)數(shù)據(jù)不重復(fù)插入

    MySQL使用UNIQUE實現(xiàn)數(shù)據(jù)不重復(fù)插入

    當(dāng)unique列在一個UNIQUE鍵上插入包含重復(fù)值的記錄時,我們可以控制MySQL如何處理這種情況:使用IGNORE關(guān)鍵字或者ON DUPLICATE KEY UPDATE子句跳過INSERT、中斷操作或者更新舊記錄為新值。
    2017-05-05
  • spark rdd轉(zhuǎn)dataframe 寫入mysql的實例講解

    spark rdd轉(zhuǎn)dataframe 寫入mysql的實例講解

    今天小編就為大家分享一篇spark rdd轉(zhuǎn)dataframe 寫入mysql的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • MySQL占用內(nèi)存較大與CPU過高測試與解決辦法

    MySQL占用內(nèi)存較大與CPU過高測試與解決辦法

    為了裝mysql環(huán)境測試,裝上后發(fā)現(xiàn)啟動后MySQL占用內(nèi)存了很大,達8百多兆。網(wǎng)上搜索了一下,得到高人指點my.ini。再也沒見再詳細(xì)的了..只好打開my.ini逐行的啃,雖然英文差了點,不過多少M還是看得明的
    2018-03-03
  • MySql通過ip地址進行訪問的方法

    MySql通過ip地址進行訪問的方法

    這篇文章主要介紹了MySql通過ip地址進行訪問的方法,首先要登錄mysql,切換數(shù)據(jù)庫然后授權(quán),具體代碼詳情大家參考下本文
    2018-06-06
  • mYsql日期和時間函數(shù)不求人

    mYsql日期和時間函數(shù)不求人

    mYsql日期和時間函數(shù)不求人...
    2007-04-04
  • MySQL修改innodb_data_file_path參數(shù)的一些注意事項

    MySQL修改innodb_data_file_path參數(shù)的一些注意事項

    這篇文章主要給大家介紹了關(guān)于MySQL修改innodb_data_file_path參數(shù)的一些注意事項,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論