1. 程式人生 > >MySQL事務提交過程(一)

MySQL事務提交過程(一)

複製程式碼
mysql_execute_command

trans_commit_stmt

ha_commit_trans(thd, FALSE);

{

    TC_LOG_DUMMY:ha_commit_low

        ha_commit_low()   

            innobase_commit

            {

                //獲取innodb層對應的事務結構

                trx = check_trx_exists(thd);

                if(單個語句,且非自動提交)

                {

                     
//釋放自增列佔用的autoinc鎖資源 lock_unlock_table_autoinc(trx); //標識sql語句在事務中的位置,方便語句級回滾 trx_mark_sql_stat_end(trx); } else 事務提交 { innobase_commit_low() { trx_commit_for_mysql();
<span style="color: #ff0000;">trx_commit</span>(trx); } //確定事務對應的redo日誌是否落盤【根據flush_log_at_trx_commit引數,確定redo日誌落盤方式】 trx_commit_complete_for_mysql(trx); trx_flush_log_if_needed_low(trx->commit_lsn); log_write_up_to(lsn); } } }
複製程式碼