您好,登錄后才能下訂單哦!
文檔寫的很清楚:
如果innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日志文件到磁盤,提交事務的時候不做任何操作。
當設為默認值1的時候,每次提交事務的時候,都會將log buffer刷寫到日志。
如果設為2,每次提交事務都會寫日志,但并不會執行刷的操作。每秒定時會刷到日志文件。要注意的是,并不能保證100%每秒一定都會刷到磁盤,這要取決于進程的調度。
默認值1是為了保證完整的ACID。當然,你可以將這個配置項設為1以外的值來換取更高的性能,但是在系統崩潰的時候,你將會丟失1秒的數據。設為0的話,mysqld進程崩潰的時候,就會丟失最后1秒的事務。設為2,只有在操作系統崩潰或者斷電的時候才會丟失最后1秒的數據。InnoDB在做恢復的時候會忽略這個值。
刷寫其實是兩個操作,刷(flush)和寫(write),區分這兩個概念(兩個系統調用)是很重要的。在大多數的操作系統中,把Innodb的log buffer(內存)寫入日志(調用系統調用write),只是簡單的把數據移到操作系統緩存中,操作系統緩存同樣指的是內存。并沒有實際的持久化數據。
所以,通常設為0和2的時候,在崩潰或斷電的時候會丟失最后一秒的數據,因為這個時候數據只是存在于操作系統緩存。之所以說“通常”,可能會有丟失不只1秒的數據的情況,比如說執行flush操作的時候阻塞了。
設為1當然是最安全的,但性能頁是最差的(相對其他兩個參數而言,但不是不能接受)。如果對數據一致性和完整性要求不高,完全可以設為2,如果只最求性能,例如高并發寫的日志服務器,設為0來獲得更高性能。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。