MySQl事務建立,開始以及提交
建立事務
trx_allocate_for_mysql中呼叫trx_create 進行建立
方法中分配一個記憶體物件,然後初始化這個物件的值,可以看到trx->id = ut_dulint_zero;
在建立的時候是設定了0,
建立undo_mutex
事務的提交
trx_commit_for_mysql
trx->op_info = "committing";
trx_start_if_not_started(trx);
mutex_enter(&kernel_mutex);
trx_commit_off_kernel(trx);
mutex_exit(&kernel_mutex);
開始一個事務
trx_start_low
if (rseg_id == ULINT_UNDEFINED) {
// 分配roll segment
rseg_id = trx_assign_rseg();
}
// 事務系統包含一個陣列,有對應的roll segment,大小256,一個事務有256個roll segment,rseg_id 是上面分配的,
系統最多也只能有256個回滾段
rseg = trx_sys_get_nth_rseg(trx_sys, rseg_id);
//事務開始時就分配事務ID
trx->id = trx_sys_get_new_trx_id();
/* The initial value for trx->no: ut_dulint_max is used in
read_view_open_now: */
trx->no = ut_dulint_max;
trx->rseg = rseg;
trx->conc_state = TRX_ACTIVE;
trx->start_time = time(NULL);
UT_LIST_ADD_FIRST(trx_list, trx_sys->trx_list, trx);
return(TRUE);
}
回滾段的分配trx_assign_rseg
回滾段也是使用列表進行管理,會跳過系統回滾段
事務的提交
trx_commit_off_kernel
針對insert update 的undo 做了區分,在事務提交的時候,會修改undo的狀態
事務提交的程式碼很好的描述了mtr的作用,文件中的描述是確保在檔案層面確保事務的完整性。
因為這個事務涉及到了undo檔案和binlog 檔案
關於update的undo 清理
trx_purge_add_update_undo_to_history
將undo的加入到history list,然後清理undo段
insert的操作涉及到可見性的問題,insert的undo是設定成free狀態,undo 是purge,insert的undo並沒有放入到history list 中,
insert的undo和update的undo為何區分開來處理?
create table為什麼放到事務中處理?
有興趣學習原始碼的加群一起學習啊 QQ: 700072075
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25719946/viewspace-2898623/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL事務兩段式提交MySql
- MySQL:begin後事務為什麼不提交MySql
- MySQL實現事務的提交和回滾MySql
- SharePlex qview工具 vs OGG logdump工具探究兩個複製工具事務開始 or 事務提交複製?View
- mysql隱式提交事務transaction一點筆記MySql筆記
- MySQL事務提交的三個階段介紹MySql
- 十五:MySQL層事務提交流程簡析(筆記)MySql筆記
- 第15節:MySQL層事務提交流程簡析MySql
- 初始mysql以及建立MySql
- 事務單獨提交和
- 一文帶你深度解析MySQL 8.0事務提交原理MySql
- MySQL事務還沒提交,Canal就能讀到訊息了?MySql
- Spring中的事務提交事件Spring事件
- vitess兩階段提交事務Vite
- xtrabackup備份mysql以及建立自動定時任務MySql
- MySQL 事務MySql
- mysql事務MySql
- MySQL 事務的四大特性以及隔離級別MySql
- MySQL事務(一)認識事務MySql
- MySQL 核心模組揭秘 | 06 期 | 事務提交之前,binlog 寫到哪裡?MySql
- MySQL 事務操作MySql
- MySQL--->事務MySql
- MySQL 三 事務MySql
- MySQL--事務MySql
- MySQL索引事務MySql索引
- MySQL-事務MySql
- 資料庫事務以及事務的四個特性資料庫
- @Transactional註解管理事務和手動提交事務
- 分散式:分散式事務(CAP、兩階段提交、三階段提交)分散式
- MySQL索引、事務以及儲存引擎的相關知識和命令MySql索引儲存引擎
- 分散式事務(二)之三階段提交分散式
- 分散式事務(二)之兩階段提交分散式
- MySQL 事務日誌MySql
- mysql基礎_事務MySql
- MySQL 事務和鎖MySql
- MySQL事務與鎖MySql
- MySQL 事務隔離MySql
- 細談Mysql事務MySql