MySQL高級篇(五) InnoDB數(shu)據存儲結構與數(shu)據處(chu)理及(ji)存儲支(zhi)持服務
InnoDB數(shu)據存儲結構
- 表(biao)空(kong)間(jian):
- 系統表(biao)空(kong)間(jian)(ibdata1):存儲元(yuan)數(shu)據、UNDO日(ri)誌(zhi)、雙(shuang)寫緩沖區(qu)等(deng)系統數(shu)據。
- 獨立表(biao)空(kong)間(jian)(file-per-table):每個表(biao)的數(shu)據和索引存儲在(zai)獨立的(de).ibd文件(jian)中(zhong),便(bian)於管理和優化。
- 段(duan)(Segment):
- 表(biao)空(kong)間(jian)被(bei)劃(hua)分(fen)為(wei)多個段,例如(ru)數(shu)據段(duan)(存儲表(biao)數(shu)據)和索引段(duan)(存儲索引數(shu)據)。
- 區(qu)(Extent):
- 段(duan)由多個區(qu)組成,每個區(qu)大(da)小為1MB(在(zai)默認頁(ye)大(da)小為16KB時(shi),包(bao)含64個頁(ye))。
- 頁(ye)(Page):
- 區(qu)由多個頁(ye)組成,頁(ye)是InnoDB磁盤管理的(de)最小單(dan)位(wei),默認大(da)小為16KB。
- 頁(ye)類(lei)型包(bao)括(kuo)數(shu)據頁(ye)、索引頁(ye)、UNDO頁(ye)等,用(yong)於存儲行(xing)數(shu)據、B+樹(shu)索引節(jie)點和事(shi)務回滾(gun)信息(xi)。
- 行(Row):
- 頁(ye)內存儲實際的行(xing)數(shu)據,InnoDB支(zhi)持行格(ge)式(shi)如(ru)COMPACT、DYNAMIC等(deng),以優化存儲和性能(neng)。
數(shu)據處(chu)理機(ji)制(zhi)
- 緩沖(chong)池(chi)(Buffer Pool):
- 內存中(zhong)的緩(huan)存區(qu)域,用(yong)於存儲頻繁訪(fang)問(wen)的(de)數(shu)據頁(ye)和索引頁(ye),減少(shao)磁盤I/O。
- 采(cai)用(yong)LRU算法(fa)管理頁(ye)的置(zhi)換(huan),提升查(zha)詢(xun)性能(neng)。
- 日(ri)誌(zhi)系統:
- 重(zhong)做(zuo)日(ri)誌(zhi)(Redo Log):記錄數(shu)據修(xiu)改操作,確保(bao)事(shi)務的持久性和崩(beng)潰恢復(fu)。
- UNDO日(ri)誌(zhi):存儲事(shi)務回滾(gun)所需的(de)歷史數(shu)據版(ban)本,支(zhi)持MVCC和事(shi)務隔(ge)離(li)。
- 鎖(suo)機(ji)制:
- 行級鎖(suo)和表(biao)級鎖(suo)結合,支(zhi)持高並(bing)發(fa)事(shi)務處理。
- 通過間(jian)隙鎖(suo)(Gap Lock)和Next-Key Lock防止幻(huan)讀。
- 多(duo)版本並發(fa)控制(zhi)(MVCC):
- 通過行版(ban)本和UNDO日(ri)誌(zhi)實現非(fei)鎖(suo)定(ding)讀,提高(gao)並(bing)發(fa)性能(neng)。
存儲支(zhi)持服務
- 雙(shuang)寫緩沖區(qu)(Doublewrite Buffer):
- 在(zai)寫入(ru)數(shu)據頁(ye)到(dao)磁盤前,先寫入(ru)雙(shuang)寫緩沖區(qu),防止部(bu)分(fen)頁(ye)寫入(ru)導致(zhi)的(de)損(sun)壞。
- 自(zi)適應(ying)哈希索引(Adaptive Hash Index):
- 自(zi)動(dong)為頻繁訪(fang)問(wen)的(de)索引頁(ye)構建哈希索引,加(jia)速(su)等(deng)值查(zha)詢。
- 插(cha)入(ru)緩沖(chong)區(qu)(Insert Buffer):
- 對非(fei)唯(wei)壹(yi)輔(fu)助索引的(de)插入(ru)操作進(jin)行(xing)緩(huan)沖(chong),減(jian)少隨(sui)機I/O,提升寫入(ru)效(xiao)率。
- 檢查點(Checkpoint):
- 定期(qi)將臟頁(ye)刷新(xin)到(dao)磁盤,確保(bao)數(shu)據壹(yi)致(zhi)性並(bing)優化恢(hui)復(fu)時間(jian)。
總結