Mysql的事務日誌執行
阿新 • • 發佈:2021-09-13
Mysql的事務特性(原子性,一致性,隔離性,永續性)
事務的執行依靠日誌,事務執行時,日誌先執行
事務提交的流程
提交事務 |
日誌刷盤 |
資料刷盤 |
寫cpk(資料校驗) |
事務提交的時候。會有兩個日誌檔案
redo 重做日誌
記錄我們提交的事務,事務提交後,假如斷電了,沒有來的及寫入磁碟,mysql 重啟就會執行redo log
undo 回滾日誌
異常,錯誤,手動回滾寫入
回滾日誌會寫入一條相反的語句到日誌 update/相反的update ,insert 寫入一條deete等
注:事務如果沒有提交commit ,就會等待,超出事務最大執行時間,就會異常。事務執行完畢以後,mysql不會再去執行undo(回滾日誌)
事務開啟的時候,我們進行資料庫操作,首先會建立一個日誌檔案,會記錄該事務一個lns序列號,當執行事務的時候,會往innodb_log_bufferri日誌快取區插入事務日誌(redo),當事務提交時會將日誌快取區裡面的事務日誌刷入磁碟,這個動作主要有innodb_flush_log_at_trx_commit來進行控制
使用事務也會影響效能:控制提交時間
日誌寫入時間可以通過innodb_flush_log_at_trx_commit 函式來進行設定 0 1 2 三個值
引數mysql內預設為1
0 代表事務提交以後,隔一秒寫入快取日誌內部,在隔一秒寫入磁碟檔案 。開銷小,容易出現數據丟失,比如忽然斷電,資料沒有寫入磁碟,伺服器重啟後無法進行回滾日誌進行資料恢復
1 代表實時寫入,直接寫入日誌與磁碟,開銷大,資料不會出現丟失的情況
2 事務提交以後,直接寫入快取日誌,再隔一秒寫入磁碟檔案,折中方案