mysql中的xa

aoerqileng發表於2022-08-26
事務執行開始,先獲取commit的mdl鎖,然後進行2pc判斷,開啟binlog的就使用binlog作為協調器,binlog繼承了tc_log
進入prepare,commit
xa 
if (!trn_ctx->no_2pc(trx_scope) && (trn_ctx->rw_ha_count(trx_scope) > 1))
      error= tc_log->prepare(thd, all);
      
mysqld!trx_undo_set_state_at_prepare(trx_t*, trx_undo_t*, bool, mtr_t*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/storage/innobase/trx/trx0undo.cc:1910)
mysqld!trx_prepare_low(trx_t*, trx_undo_ptr_t*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/storage/innobase/trx/trx0trx.cc:2783)
mysqld!trx_prepare(trx_t*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/storage/innobase/trx/trx0trx.cc:2829)
mysqld!trx_prepare_for_mysql(trx_t*) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/storage/innobase/trx/trx0trx.cc:2914)
mysqld!innobase_xa_prepare(handlerton*, THD*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/storage/innobase/handler/ha_innodb.cc:17143)
mysqld!ha_prepare_low(THD*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/handler.cc:2359)
mysqld!MYSQL_BIN_LOG::prepare(THD*, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/binlog.cc:8607)
mysqld!ha_commit_trans(THD*, bool, bool) (/Users/xiaoyu.bai/Downloads/mysql-5.7.29/sql/handler.cc:1791)
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)
這部分是將undo標記prepare,將flush redo推遲到
group commit的flush階段。
commit就是刷binlog cache,寫入檔案,執行ordered_commit,組提交

xa協調器部分故障處理怎麼做?超時重試?


有興趣學習原始碼的加群一起學習啊 QQ:                                                                700072075

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25719946/viewspace-2911210/,如需轉載,請註明出處,否則將追究法律責任。

相關文章