Mysql

InnoDB:未送出的事務會產生重做日誌嗎?

  • January 24, 2019

MySQL在送出事務之前,會先寫REDO日誌,然後再送出事務,即預寫日誌。

start transaction;

update users set uuid = UUID() from user where id = 1
update users set uuid = UUID() from user where id = 2
update users set uuid = UUID() from user where id = 3
...
...
update users set uuid = UUID() from user where id = 1,000,000
// not yet commit

如果一個事務要更新 100 萬條記錄,這需要 100 秒。在執行期間,這會uncommitted transaction產生redo log嗎?

innodb 在事務期間生成重做日誌,即使事務尚未送出,也可能同步到磁碟。

log_buffer 的大小是有限的。當它溢出時,內容將被寫入日誌文件。無論 innodb_flatc 的值如何,事務最終都會被刷新到磁碟。

引用自:https://dba.stackexchange.com/questions/225532