ordered_commit流程梳理
ordered_commit 是比較核心的函式,包含了組提交的3個階段,以及半同步的位置,下面是梳理的對應的流程
刷redo的呼叫堆疊
mysqld!innobase_flush_logs(handlerton*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/storage/innobase/handler/ha_innodb.cc:4233) mysqld!flush_handlerton(THD*, st_plugin_int**, void*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/handler.cc:2488) mysqld!plugin_foreach_with_mask(THD*, char (**)(THD*, st_plugin_int**, void*), int, unsigned int, void*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/sql_plugin.cc:2524) mysqld!plugin_foreach_with_mask(THD*, char (*)(THD*, st_plugin_int**, void*), int, unsigned int, void*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/sql_plugin.cc:2539) mysqld!ha_flush_logs(handlerton*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/handler.cc:2498) mysqld!MYSQL_BIN_LOG::process_flush_stage_queue(unsigned long long*, bool*, THD**) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/binlog.cc:8975) mysqld!MYSQL_BIN_LOG::ordered_commit(THD*, bool, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/binlog.cc:9618) mysqld!MYSQL_BIN_LOG::commit(THD*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/binlog.cc:8875) mysqld!ha_commit_trans(THD*, bool, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/handler.cc:1806) mysqld!trans_commit_stmt(THD*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/transaction.cc:465) mysqld!mysql_execute_command(THD*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/sql_parse.cc:4995) mysqld!mysql_parse(THD*, Parser_state*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/sql_parse.cc:5584) mysqld!dispatch_command(THD*, COM_DATA const*, enum_server_command) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/sql_parse.cc:1491) mysqld!do_command(THD*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/sql_parse.cc:1032) mysqld!::handle_connection(void *) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/conn_handler/connection_handler_per_thread.cc:313) mysqld!::pfs_spawn_thread(void *) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/storage/perfschema/pfs.cc:2197) libsystem_pthread.dylib!_pthread_start (Unknown Source:0) libsystem_pthread.dylib!thread_start (Unknown Source:0)
看到在刷redo的過程是放到了flush階段,沒有在commit階段,主要就是prepare事務的資訊在寫入binlog之前刷redo 即可。實現redo組提交
在flush階段是把redo flush到檔案了,在commit階段,會先執行binlog的提交,在執行innodb層的提交。
所以不存在redo提交了,binlog沒有提交的情況。
在崩潰恢復的過程中,檢視提交的binlog然後在去對比innodb prepare的事務,進行回滾或提交。
有興趣學習原始碼的加群一起學習啊 QQ: 700072075
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25719946/viewspace-2911393/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jshop流程梳理JS
- React render流程梳理React
- Window的工作流程梳理
- webpack構建流程及梳理Web
- 如何梳理企業流程管理?
- Retrofit 知識梳理(1) 流程分析
- guide-rpc-framework 流程梳理GUIIDERPCFramework
- Spark Streaming 生產、消費流程梳理Spark
- 微信小程式登入流程梳理總結微信小程式
- react fiber 主流程及功能模組梳理React
- Linux作業系統啟動流程梳理Linux作業系統
- 吉特日化MES-稱量邏輯流程梳理
- 熱點聚焦:為什麼流程管理都要從流程梳理開始?薦
- 小程式開發-梳理登入流程-v1.0
- 梳理一下Android 系統啟動流程Android
- Glide 知識梳理(6) – Glide 原始碼解析之流程剖析IDE原始碼
- 無需debug,通過抽象模型快速梳理程式碼核心流程抽象模型
- Glide 知識梳理(6) - Glide 原始碼解析之流程剖析IDE原始碼
- [原始碼分析] 帶你梳理 Flink SQL / Table API內部執行流程原始碼SQLAPI
- 老焦專欄 | 用 RACI 模式梳理業務流程,提高業務釋出的效率模式
- View 繪製體系知識梳理(3) 繪製流程之 Measure 詳解View
- 從瀏覽器環境到JavaScript執行流程的一次簡單梳理瀏覽器JavaScript
- RxJava梳理RxJava
- Activity梳理
- vue梳理Vue
- Oracle梳理Oracle
- RxJava+Retrofit2搭建網路請求元件完整配置、示例程式碼及流程梳理RxJava元件
- React Hooks 梳理ReactHook
- JavaScript原型梳理JavaScript原型
- Oracle梳理二Oracle
- index_oracle索引梳理系列及分割槽表梳理IndexOracle索引
- Flutter - 動畫 API 梳理Flutter動畫API
- web知識梳理Web
- Mysql知識梳理MySql
- redis基礎梳理Redis
- MyBatis sqlSession概要梳理MyBatisSQLSession
- Flex Box 概念梳理Flex
- http快取梳理HTTP快取