MySQL InnoDB update流程
以update test set idx = 2 where id=10;為例
1.
server層,語法解析,解析成mysql認識的語法,查詢什麼表,什麼欄位,生成查詢路徑樹,選擇最優查詢路徑
2.
InnoDB儲存引擎,判斷id=10這行對應的頁是否在快取池裡,如果不在,則將對應的頁從datafile中讀到InnoDB緩衝池中,並對相關記錄加獨佔鎖
3.
undo tablespace回滾段
,idx修改之前的值和對應的主鍵、事務id原來的資訊寫入undo tablespace回滾段
4.
更新快取頁中資料,並將更新記錄和生成的LSN值(日誌子序列號)
寫入log buffer。更新之後緩衝池裡的頁就是髒頁了。
5. 提交事務時,根據innodb_flush_log_at_trx_commit設定,用不同方式將log buffer中的更新記錄重新整理到redo log中
然後寫binlog ,寫完之後後開始binlog的commit,同步到磁碟
binlog同步後把binlog檔案和postition(binlog檔案內的位置)寫到redo log 中,然後在redo log寫入一個commit標誌,然後就完成了這個事務的提交。接下來釋放獨佔鎖
6.後臺i/o執行緒將快取中合適的髒頁重新整理到磁碟資料檔案中,如果開啟雙寫快取功能,需要先複製一份髒頁到雙寫緩衝區,等其中的資料落盤,再從緩衝池把髒頁重新整理到各個資料檔案中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2744277/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL -update語句流程總結MySql
- 深入解讀MySQL InnoDB儲存引擎Update語句執行過程MySql儲存引擎
- MySQL 優化六(InnoDB 下 update 資料出現表鎖之優化)MySql優化
- MySQL Deadlocks in InnoDBMySql
- MySQL InnoDB 索引MySql索引
- MySQL原理簡介—2.InnoDB架構原理和執行流程MySql架構
- mysql innodb索引高度MySql索引
- Mysql innodb引擎(二)鎖MySql
- MySQL InnoDB儲存引擎MySql儲存引擎
- MySQL InnoDB髒頁管理MySql
- MySQL 5.7 InnoDB Tablespace EncryptionMySql
- MySQL InnoDB緩衝池MySql
- Mysql update誤操作恢復MySql
- MySQL查詢select語句的執行流程以及InnoDB記憶體結構MySql記憶體
- How Logs Work On MySQL With InnoDB TablesMySql
- Mysql innodb引擎(三) 事務MySql
- MySQL InnoDB表空間加密MySql加密
- 探索MySQL的InnoDB索引失效MySql索引
- MySQL的show engine innodb statusMySql
- MySQL InnoDB記憶體配置MySql記憶體
- MySQL 配置InnoDB清理排程MySql
- MySQL InnoDB頁面大小配置MySql
- MySQL_插入更新 ON DUPLICATE KEY UPDATEMySql
- mysql update join,insert select 語法MySql
- MySQL的update語句避坑MySql
- MySQL insert on duplicate key update 死鎖MySql
- MySQL更新資料,如何使用updateMySql
- MySQL innodb buffer pool 命中率以及快取了哪些 InnoDB TableMySql快取
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- 搞懂MySQL InnoDB B+樹索引MySql索引
- 『淺入淺出』MySQL 和 InnoDBMySql
- Mysql研磨之InnoDB行鎖模式MySql模式
- MySQL:Innodb 一個死鎖案例MySql
- MySQL InnoDB的索引擴充套件MySql索引套件
- MySQL InnoDB 中的鎖機制MySql
- mysql innodb double write概念彙總MySql
- MySql(四) InnoDB事務淺析MySql
- MySQL InnoDB日誌檔案配置MySql