InnoDB儲存引擎

2022-06-29 08:33:14 字數 2470 閱讀 7801

空間( filespace)

空間是由檔案所組成的鍊錶,空間中的檔案有一定的順序。每個空間

用乙個空間id來標識。id=0 的空間是系統表空間。

空間可以分為三類:

表空間:儲存的是資料庫檔案;

日誌空間:儲存的是日誌檔案;

日誌備份空間:儲存的是日誌檔案的備份。

系統表空間(共享表空間)

innodb系統表空間由配置檔案中的選項引數innodb_data_file_path = /ibdata/ibdata1:10m:autoextend(預設)指定的資料檔案組成。這些資料檔案組成了系統表空間。在新建立的系統表空間中,innodb將從第乙個資料檔案開始分配空間。

innodb系統表空間包含innodb資料字典,表資料頁,表索引頁,undo空間,回滾段,雙寫緩衝區,插入緩衝等。

系統表空間也預設包含任何使用者在系統表空間建立的表資料和索引資料。

單表單檔案表空間(file-per-table tablespaces)(獨立表空間)

為了避免在系統表空間中儲存所有表和索引,可以啟用innodb_file_per_table配置選項(預設值)

單表單檔案特性提供了乙個更加靈活的選擇,每個表的資料都儲存在自己的表空間資料檔案(.ibd)裡。啟用了這個引數,每張表的表空間內存放的只是資料、索引和插入緩衝頁,其他型別的資料還是存放在共享表空間內。

段(segment)

段是磁碟上空間分配和**的申請者,是乙個邏輯概念,用來管理物理檔案。常見的段有資料段、索引段、回滾段等。段是為了保持葉子節點在磁碟上的連續,可以實現更好的順序i/o操作,因為這些葉子節點包含實際的表資料。

在innodb中會為每個索引分配兩個段,乙個段對應b+樹的非葉子節點(索引段),另乙個對應葉子節點(資料段)。

區(extend)

區是構成段的基本元素,乙個段由若干個區構成,乙個區是物理上連續分配的一段空間,每個段至少會有乙個區。

乙個段的物理空間是無限的,擴充套件的最小單位是區,區的空間大小是固定的一般是64個頁面。

頁(page)

page是整個innodb儲存的最基本構件,也是innodb磁碟管理的最小單位(mysql與磁碟互動的最小單位,預設大小16kb,最多存放7992行記錄,一般真是場景中一行資料大約1kb,一頁資料也就16行左右,b+樹的節點就是頁),與資料庫相關的所有內容都儲存在這種page結構裡。

buffer pool 快取資料頁,客戶端查詢時首先在buffer poll中查詢,當快取頁中沒有時再到資料檔案中查詢

當寫檔案時首先寫入buffer pool和redo log檔案中,根據設定是否進行刷盤和刷盤方式

資料庫髒頁刷盤採用double write ,保證原子寫入成功

髒頁與刷盤

在innodb中處理使用者查詢後,其結果在記憶體空間的緩衝池已經發生變化,但是還未記錄到磁碟。這種頁面稱為髒頁,將髒頁記錄到磁碟的過程稱為刷髒。

刷髒分兩種演算法:

flush-list(依據時間管理緩衝池中更改頁面的列表)

lru-list(用於管理緩衝池中非常用頁面的列表)

事務提交後,innodb首先在緩衝池中找到對應的頁,把事務更新到緩衝區中.當重新整理髒頁到磁碟時,緩衝區把髒頁拷貝到double write buffer,doublewirte buffer把髒頁重新整理到double write磁碟(這也是一次順序io),再把髒頁重新整理到資料檔案中

mysql雙寫

目的:防止頁損壞

原理:在記憶體中開闢了 doublewrite buffer 記憶體空間(2m),將髒頁複製到doublewrite buffer 記憶體空間後, 先把doublewrite buffer的頁資料寫入到共享表空間ibdata1磁碟上,複製了頁的副本完成之後, 再將 doublewrite buffer的頁資料寫入到各個表空間檔案中。

資料頁預設16k,一次寫入512位元組,防止頁損壞,doublewrite產生了頁副本,用於恢復頁, 然後redo 在恢復的頁上重做一遍日誌

redo buffer和redo file 都是512位元組大小,一次寫入也是512位元組,原子寫,所以不需要doublewrite

InnoDB 儲存引擎

innodb是事務型資料庫的首選引擎,支援事務安全表 acid 支援行鎖定和外來鍵。mysql 5.5.5 之後,innodb作為預設儲存引擎。innodb的主要特性有一下幾項。a.innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事務安全 acid相容 儲存引擎。innodb鎖定在行級並...

InnoDB 儲存引擎

設計上採用了類似於oracle資料庫的架構 接下來 詳細介紹 innodb 儲存引擎的 體系架構 及其不同於其他儲存引擎的特性 一 概述 innodb 儲存引擎 是第乙個完整支援acid事物的 mysql 儲存引擎 特點 1 行鎖設計 2 支援mvcc 3 提供一致性非鎖定讀 4 最有效地利用 以及...

InnoDB儲存引擎

內外存交換的基本單位 mysql將資料從外存讀入記憶體不是以記錄為單位,這樣消耗太大,是以頁為單位,每個頁裡填充記錄。每頁大小為16kb。記錄堆 行記錄儲存區,分為有效記錄和已刪除記錄兩種 自由空間鍊錶 已刪除記錄組成的鍊錶 未分配空間 頁尾 儲存頁面校驗資訊 頁內的資料是按照主鍵的順序有序儲存的。...