XML DOM 獲取節點值
869
2025-03-31
MYSQL_BIN_LOG::ordered_commit() ← 執行事務順序提交,binlog group commit的主流程 | |-#########>>>>>>>>> ← 進入Stage_manager::FLUSH_STAGE階段 |-change_stage(..., &LOCK_log) | |-stage_manager.enroll_for() ← 將當前線程加入到m_queue[FLUSH_STAGE]中 | | | | ← (follower)返回true | |-mysql_mutex_lock() ← (leader)對LOCK_log加鎖,并返回false | |-finish_commit() ← (follower)對于follower則直接返回 | |-ha_commit_low() | |-process_flush_stage_queue() ← (leader)對于follower則直接返回 | |-fetch_queue_for() ← 通過stage_manager獲取隊列中的成員 | | |-fetch_and_empty() ← 獲取元素并清空隊列 | |-ha_flush_log() | |-flush_thread_caches() ← 對于每個線程做該操作 | |-my_b_tell() ← 判斷是否超過了max_bin_log_size,如果是則切換binlog文件 | |-flush_cache_to_file() ← (follower)將I/O Cache中的內容寫到文件中 |-RUN_HOOK() ← 調用HOOK函數,也就是binlog_storage->after_flush() | |-#########>>>>>>>>> ← 進入Stage_manager::SYNC_STAGE階段 |-change_stage() |-sync_binlog_file() | |-mysql_file_sync() | |-my_sync() | |-fdatasync() ← 調用系統API寫入磁盤,也可以是fsync() | |-#########>>>>>>>>> ← 進入Stage_manager::COMMIT_STAGE階段 |-change_stage() ← 該階段會受到binlog_order_commits參數限制 |-process_commit_stage_queue() ← 會遍厲所有線程,然后調用如下存儲引擎接口 | |-ha_commit_low() | |-ht->commit() ← 調用存儲引擎handlerton->commit() | | ← ### 注意,實際調用如下的兩個函數 | |-binlog_commit() | |-innobase_commit() |-process_after_commit_stage_queue() ← 提交之后的后續處理,例如semisync | |-RUN_HOOK() ← 調用transaction->after_commit | |-stage_manager.signal_done() ← 通知其它線程事務已經提交 | |-finish_commit()
在 enroll_for() 函數中,剛添加的線程如果是隊列的第一個線程,就將其設置為 leader 線程;否則就是 follower 線程,此時線程會睡眠,直到被 leader 喚醒 (m_cond_done) 。
注意,binlog_max_flush_queue_time 參數已經取消。
MySQL 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。