MYSQL INNODB 儲存引擎

2022-08-30 11:39:13 字數 1332 閱讀 9669

innodb 是事務安全的mysql儲存引擎,設計上採用了類似於oracle的架構。一般而言,在oltp的應用中,innodb應該作為核心應用表的首選儲存引擎。同時,也是因為innodb的存在,才使得mysql變得更有魅力。

第一、innodb儲存引擎概述

innodb由innobase oy 公司開發,被包括在mysql所有的二進位制發行版本中,是windows下預設的表儲存引擎。該儲存引擎是第乙個完整支援acid事務的mysql儲存引擎,行鎖設計,支援mvcc,提供類似於oracle風格一致性非鎖定讀,支援外來鍵,被設計用來最有效的利用記憶體和cpu。如果你熟悉oracle的架構,你會發現innodb於oracle很類似。

第二、innodb體系架構

innodb有多個記憶體塊,你可以認為這些記憶體塊組成了乙個大的記憶體池,負責如下工作:

1、維護所有程序/執行緒需要訪問的多個內部資料結構。

2、快取磁碟上的資料,方便快速的讀取,並且在對磁碟檔案的資料進行修改之前在這裡快取。

3、重做日誌緩衝。

後台執行緒主要作用是負責重新整理記憶體池中的資料,保證緩衝池中的記憶體快取的是最近的資料。此外,將已修改的資料檔案重新整理到磁碟檔案,同時保證在資料庫中發生異常情況下innodb能恢復到正常執行狀態。innodb儲存引擎是在乙個被稱做master therad的執行緒上幾乎實現了所有功能。預設情況下,innodb儲存引擎的後台執行緒有7個-4個io thread,1個master thread,1個鎖監控執行緒,1個錯誤監控執行緒。io thread的數量有配置檔案中的innodb_file_io_threads引數控制,預設為4個。

innodb儲存引擎記憶體由:快取池、重做日誌緩衝池以及額外的記憶體池組成,分別由配置檔案中的引數innodb_buffer_pool_size和innodb_log_buffer_size的大小決定。緩衝池是記憶體中最大的部分,用來存放各種資料的快取。因為innodb的儲存引擎的工作方式總是將資料庫檔案按頁讀取到緩衝池,然後按最近最少使用的演算法來保留緩衝池中的資料。如果檔案修改,總是首先修改在快取池中的頁,然後在按照一定的頻率將快取池的髒頁重新整理到檔案。

第三、master thread 

innodb儲存引擎的主要工作都是在乙個單獨的後台執行緒master thread 中完成的。執行緒中每一秒的操作包括:

1、日誌緩衝重新整理到磁碟,即使這個事務還沒有提交。

2、合併插入緩衝。

3、至多重新整理100個innodb的緩衝池中髒頁到磁碟。

4、如果當前沒有使用者活動,切換到background loop。

即使某個事務還沒有提交,innodb還是會不斷的去重新整理緩衝池的內容來重做日誌檔案,這就是為什麼再大的事務commit的時間也是很快的因為。

mysql InnoDB儲存引擎

innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...

Mysql Innodb儲存引擎

鎖 參考資料 參考資料 行鎖 innodb的鎖是對索引加鎖,如果查詢到並沒有用到索引就會對錶進行加鎖 record lock 對單條記錄加上鎖 gap lock 間隙鎖,鎖定乙個範圍,但是不包含記錄本身 next key lock record lock gap lock,鎖定乙個方位並鎖定記錄本身...

MYSQL InnoDB儲存引擎 鎖

目錄 鎖的型別 行級鎖 意向鎖 一種表級鎖 一致性非鎖定讀 innodb儲存引擎的預設設定 行鎖的3種演算法 死鎖 innodb儲存引擎實現了如下兩種標準的行級鎖 1 共享鎖 s lock 允許事務讀一行資料。select column from table lock in share mode 2...