關於MYSQL 和INNODB的邏輯關係圖。最好的理解是一點點動手做,觀察,記錄,思考。

來源:互聯網
上載者:User

標籤:

 

每隔0.1秒就刷一次MYSQL檔案的變化,並閃動標示出來,以觀察SQL執行時,MYSQL的處理順序。

watch -n 0.1 -d stat /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/ibdata1

 

 

我理解的執行順序:(還缺插入緩衝的合并)很粗的架構理解,但折騰了許多天。

硬碟的資料檔案mytable.ibd存有mytable這個表id=1的記錄,name=123的。(innodb_per_file設定為on)

當UPDATE MYTABLE SET NAME=’ABC’ WHERE ID=1這個語句執行時,系統產生一個LSN是1

INNODB READ THREAD 將這條記錄以及詞典從硬碟中讀到記憶體的資料頁DATA PAGE中,並寫到記憶體中一塊UNDO BUFFER中。並對這條記錄加鎖(如果有索引就是行級鎖,否則就是表鎖)

INNODB WRITE THREAD將這條記錄的UNDO日誌寫到UNDO資料表空間的復原段中(預設是ibdata1檔案中),

INNODB對資料頁中的記錄進行更新,變成髒頁後,然後把LSN=1的這條日誌,寫進REDOLOG BUFFER;

到commit時,無論是顯式還是隱式,根據innodb_flush_log_at_trx_commit指定的方式,重新整理LSN到REDO LOG檔案中,然後釋放鎖。這時PURGE THREAD就可以對UNDOLOG進行清理。PURGE是按事務號不按日誌。

INNODB MASTER THREAD會擇機把髒頁刷寫回資料檔案mytable.ibd中。具體過程INNODB先把髒頁的資料拷貝到記憶體池中一個DOUBLE WRITE BUFFER中,然後調用系統FSYNC()重新整理系統緩衝來確認真正寫入了,然後再將髒頁FLUSHD到對應的資料檔案中mytable.idb後,釋放髒頁。

INNODB MASTER THREAD會擇機已經寫回資料檔案的日誌LSN,做為CHECKPOINT寫進REDOLOG中。

 

 

 

更直觀性mysql整體邏輯機構圖:

 

 

mysql sql執行過程,對理解mysql執行計畫有很大協助

 

當 ‘innodb_flush_log_at_trx_commit = x ’x=0,1,2 各值時刷盤機制

mysql 記憶體配置,對理解記憶體配置很有參考意義

 

INNODB 記憶體與硬碟之間互動。 

watch -n 0.1 -d stat /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/ibdata1 

關於MYSQL 和INNODB的邏輯關係圖。最好的理解是一點點動手做,觀察,記錄,思考。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.