innodb_flush_log_at_trx_commit配置
配置項說明
文檔寫的很清楚:
0
如果innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日志文件到磁盤,提交事務的時候不做任何操作。
1
當設為默認值1的時候,每次提交事務的時候,都會將log buffer刷寫到日志。
2
如果設為2,每次提交事務都會寫日志,但并不會執(zhí)行刷的操作。每秒定時會刷到日志文件。要注意的是,并不能保證100%每秒一定都會刷到磁盤,這要取決于進程的調度。
默認值1是為了保證完整的ACID。當然,你可以將這個配置項設為1以外的值來換取更高的性能,但是在系統(tǒng)崩潰的時候,你將會丟失1秒的數(shù)據(jù)。設為0的話,mysqld進程崩潰的時候,就會丟失最后1秒的事務。設為2,只有在操作系統(tǒng)崩潰或者斷電的時候才會丟失最后1秒的數(shù)據(jù)。InnoDB在做恢復的時候會忽略這個值。
刷寫的概念
刷寫其實是兩個操作,刷(flush)和寫(write),區(qū)分這兩個概念(兩個系統(tǒng)調用)是很重要的。在大多數(shù)的操作系統(tǒng)中,把Innodb的log buffer(內存)寫入日志(調用系統(tǒng)調用write),只是簡單的把數(shù)據(jù)移到操作系統(tǒng)緩存中,操作系統(tǒng)緩存同樣指的是內存。并沒有實際的持久化數(shù)據(jù)。
所以,通常設為0和2的時候,在崩潰或斷電的時候會丟失最后一秒的數(shù)據(jù),因為這個時候數(shù)據(jù)只是存在于操作系統(tǒng)緩存。之所以說“通常”,可能會有丟失不只1秒的數(shù)據(jù)的情況,比如說執(zhí)行flush操作的時候阻塞了。
總結
設為1當然是最安全的,但性能頁是最差的(相對其他兩個參數(shù)而言,但不是不能接受)。如果對數(shù)據(jù)一致性和完整性要求不高,完全可以設為2,如果只最求性能,例如高并發(fā)寫的日志服務器,設為0來獲得更高性能。
總結
以上是生活随笔為你收集整理的innodb_flush_log_at_trx_commit配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 慢查询日志中出现超大时间的案例分析
- 下一篇: linux 系统监控、诊断工具之 top