innodb 基本的儲存結構與 oracle 類似,分別由表空間、段、區和塊組成,但它只是相當於 oracle 的乙個「簡化版」,提供的維護功能遠不如後者強大。
例如 innodb 的表空間只能在資料庫啟動前配置,不能像 oracle 那樣在執行過程動態維護;它的段只能由儲存引擎本身自動管理,而不能像 oracle 那樣手工管理;
它的塊固定大小是 16 k(除非在源**中修改),不能像 oracle 可以在不同的表空間配置不同大小的塊;同樣重做日誌方面的維護也需要向 oracle 好好學習。
雖然如此,但它仍然可以像 oracle 那樣的非鎖定讀,即預設情況下讀取操作不會產生鎖。
並且通過使用多版本併發控制(mvcc)來獲得高併發性。它很好的實現了 sql 標準的四種隔離級別,預設為 repeatable read。同時使用一種被稱為 next-key locking 的策略來避免幻讀(phantom)現象的產生。
另外,innodb儲存引擎還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應雜湊索引(adaptive hash index)、預讀(read ahead)等高效能和高可用的功能。
對於表中資料的儲存,innodb 儲存引擎採用了聚集(clustered)的方式,這種方式類似於 oracle 的索引聚集表(index organized table,iot)。
一般來說,oracle 的核心後台程序有 ckpt、dbwn、lgwr、arcn、pmon、smon 等。
預設情況下,innodb 儲存引擎的後台執行緒有7個:4個 io thread,1個master thread,1個鎖(lock)監控執行緒,1個錯誤監控執行緒。
io thread 的數量由配置檔案中的 innodb_file_ io_threads 引數控制,預設為4。
4個 io 執行緒分別是 insert buffer thread、log thread、read thread、write thread。在linux平台下,io thread的數量不能進行調整,但是在windows平台下可以通過引數 innodb_file_io_threads 來增大 io thread。
innodb plugin 版本開始增加了預設 io thread 的數量,預設的 read thread 和 write thread 分別增大到了4個,並且不再使用 innodb_file_ io_threads 引數,而是分別使用 innodb_read_io_threads 和 innodb_write_io_threads 引數。
innodb 的記憶體組成:緩衝池(buffer pool)、重做日誌緩衝池(redo log buffer)以及額外的記憶體池(additional memory pool),分別由配置檔案中的引數innodb_buffer_pool_size、innodb_log_buffer_size 和 innodb_additional_mem_pool_size 的大小決定。
innodb 的工作方式總是將資料庫檔案按頁(每頁16k)讀取到緩衝池,然後按最近最少使用(lru)的演算法來保留在緩衝池中的快取資料。
如果資料庫檔案需要修改,總是首先修改在快取池中的頁(發生修改後,該頁即為髒頁),然後再按照一定的頻率將緩衝池的髒頁重新整理(flush)到檔案。
具體來看,緩衝池中快取的資料頁型別有: 索引頁、資料頁、undo頁、插入緩衝(insert buffer)、自適應雜湊索引(adaptive hash index)、innodb儲存的鎖資訊(lock info)、資料字典資訊(data dictionary)等。
mysql InnoDB儲存引擎
innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...
MySQL InnoDB 儲存結構
mysql innodb 儲存結構 innodb儲存引擎的關鍵特性包括 插入緩衝 insert buffer 兩次寫 double write 自適應雜湊索引 adaptive hash index 非同步io async io 重新整理鄰接頁 從邏輯上講 所有的資料都被邏輯的放在乙個空間中,稱為t...
Mysql Innodb儲存引擎
鎖 參考資料 參考資料 行鎖 innodb的鎖是對索引加鎖,如果查詢到並沒有用到索引就會對錶進行加鎖 record lock 對單條記錄加上鎖 gap lock 間隙鎖,鎖定乙個範圍,但是不包含記錄本身 next key lock record lock gap lock,鎖定乙個方位並鎖定記錄本身...