04.03 MySQL存儲引擎

InnoDB是MySQL的一種存儲引擎,與傳統的ISAM與MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事務(Transaction)功能,類似於PostgreSQL。


特點

1、支持事務安裝

Innodb 在功能方面最重要的一點就是對事務安全的支持,實現了 SQL92 標準所定義的所有四個級別(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE)。

2、數據多版本讀取

Innodb 在事務支持的同時,為了保證數據的一致性已經併發時候的性能,通過對undo信息,實現了數據的多版本讀取。

3、鎖定機制的改進

Innodb 改變了 MyISAM 的鎖機制,實現了行鎖。雖然 Innodb 的行鎖機制的實現是通過索引來完成的,但畢竟在數據庫中 99%的 SQL 語句都是要使用索引來做檢索數據的。

4、實現外鍵

Innodb 實現了外鍵引用這一數據庫的重要特性,使在數據庫端控制部分數據的完整性成為可能。

MySQL存儲引擎 - InnoDB簡介


Innodb的存儲文件

1、數據文件(表數據和索引數據)

存放數據表中的數據和所有的索引數據,包括主鍵和其他普通索引。

在 Innodb 中,存在了表空間(tablespace)這樣一個概念,但是他和 Oracle 的表空間又有較大的不同。

Innodb 的表空間分為兩種形式:一種是共享表空間,也就是所有表和索引數據被存放在同一個表空間(一個或多個數據文件)中,通過 innodb_data_file_path 來指定,增加數據文件需要停機重啟;另外一種是獨享表空間,也就是每個表的數據和索引被存放在一個單獨的.ibd 文件中。

InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間

獨立表空間優點:

1.每個表都有自已獨立的表空間。

2.每個表的數據和索引都會存在自已的表空間中。

3.可以實現單表在不同的數據庫中移動。

4.空間可以回收(除drop table操作處,表空不能自已回收)

缺點:

單表增加過大,如超過100G

共享表空間在Insert操作上少有優勢。其它都沒獨立表空間表現好。當啟用獨立表空間時,請合理調整:innodb_open_files。


MySQL存儲引擎 - InnoDB簡介

2、日誌文件

Innodb 的日誌文件和 Oracle 的 redo 日誌比較類似,同樣可以設置多個日誌組(最少 2個),同樣採用輪循策略來順序的寫入,甚至在老版本中還有和 Oracle 一樣的日誌歸檔特性 。

如果數據庫中有創建了 Innodb 的表,那麼千萬別全部刪除 innodb 的日誌文件,因為很可能就會讓數據庫 crash,無法啟動,或者是丟失數據。

由於 Innodb 是事務安全的存儲引擎,所以系統 Crash 對他來說並不能造成非常嚴重的損失,由於有 redo 日誌的存在,有 checkpoint 機制的保護,Innodb 完全可以通過 redo 日誌將數據庫 Crash 時刻已經完成但還沒有來得及將數據寫入磁盤的事務恢復,也能夠將所有部分完成並已經寫入磁盤的未完成事務回滾並將數據還原。

ib_logfile 存儲 redo log,由參數 innodb_log_files_in_group 確定個數,參數 innodb_log_group_home_dir確定存儲路徑,命名從 ib_logfile0 開始,依次寫滿 ib_logfile 並順序重用。

如果最後1個 ib_logfile 被寫滿,而第一個ib_logfile 中所有記錄的事務對數據的變更已經被持久化到磁盤中,將清空並重用之。

MySQL存儲引擎 - InnoDB簡介


分享到:


相關文章: