程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> [MySQL]淺談InnoDB存儲引擎

[MySQL]淺談InnoDB存儲引擎

編輯:MySQL綜合教程

[MySQL]淺談InnoDB存儲引擎   InnoDB是事務安全的存儲引擎,設計上借鑒了很多Oracle的架構思想,一般而言,在OLTP應用中,InnoDB應該作為核心應用表的首先存儲引擎。InnoDB是由第三方的Innobase Oy公司開發,現已被Oracle收購,創始人是Heikki Tuuri,芬蘭赫爾辛基人,和著名的Linux創始人Linus是校友。   InnoDB體系架構     上面是InnoDB的一個簡圖,簡單來說,InnoDB是由一系列後台線程和一大塊內存組成。   後台線程 默認情況下,InnoDB的後台線程有7個 —— 4個IO thread, 1個master thread, 1個lock monitor thread, 一個error monitor thread   內存 InnoDB的內存主要有以下幾個部分組成:緩沖池 (buffer pool)、重做日志緩沖池(redo log buffer)以及額外的內存池(additional memory pool),如下圖所示:     其中緩沖池占最大塊內存,用來緩存各自數據,數據文件按頁(每頁16K)讀取到緩沖池,按最近最少使用算法(LRU)保留緩存數據。 緩沖池緩沖的數據類型有:數據頁、索引頁、插入緩沖、自適應哈希索引、鎖信息、數據字典信息等,其中數據頁和索引頁占了絕大部分內存。   日志緩沖將重做日志信息先放入這個緩沖區,然後按一定頻率(默認為1s)將其刷新至重做日志文件。   Master 後台線程 InnoDB的主要工作都是在一個單獨的Master線程裡完成的。Master線程的優先級最高,它主要分為以下幾個循環:主循環(loop)、後台循環(background loop)、刷新循環(flush loop)、暫停循環(suspend loop)。   先來看看主循環,下面是它的偽代碼: [plain]  void master_thread() (   loop:   for (int i =0; i <10; i++){       do thing once per second       sleep 1 second if necessary   }   do things once per ten seconds   goto loop;   }     其中每秒一次的操作包括: 刷新日志緩沖區(總是) 合並插入緩沖(可能) 至多刷新100個髒數據頁(可能) 如果沒有當前用戶活動,切換至background loop (可能) 和Oracle類似,即使事務未提交,也會每秒刷新重做日志緩沖區。   其中每10秒一次的操作包括: 合並至多5個插入緩沖(總是) 刷新日志緩沖(總是) 刷新100個或10個髒頁到磁盤(總是) 產生一個檢查點(總是) 刪除無用Undo 頁 (總是)   接著來看後台循環,若當前沒有用戶活動或數據庫關閉時,會切換至該循環執行以下操作: 刪除無用的undo頁(總是) 合並20個插入緩沖(總是) 跳回到主循環(總是) 不斷刷新100個頁,直到符合條件跳轉到flush loop(可能) 如果flush loop中也沒有什麼事情可做,邊切換到suspend loop,將master線程掛起。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved