MySQL配置項innodb_flush_log_at_trx_commit

首先須要大體瞭解一下mysql日誌操做步驟:
log_buff ---mysql寫 (write)---> log_file ---OS刷新 (flush)---> disk
 
innodb_flush_log_at_trx_commit 參數解釋:
0(延遲寫): log_buff  --每隔1秒--> log_file  —實時—> disk
1(實時寫,實時刷): log_buff  —實時—>  log_file  —實時—> disk
2(實時寫,延遲刷): log_buff  —實時—> log_file --每隔1秒--> disk
 
 
附Mysql的中文解釋:
當innodb_flush_log_at_trx_commit被 設置爲0,日誌緩衝每秒一次地被寫到日誌文件,而且對日誌文件作到磁盤操做的刷新,可是在一個事務提交不作任何操做。當這個值爲1(默認值)之時,在每一個事務提交時,日誌緩衝被寫到日誌文件,對日誌文件作到磁盤操做的刷新。當設置爲2之時,在每一個提交,日誌緩衝被寫到文件,但不對日誌文件作到磁盤操做的刷新。儘管如此,在對日誌文件的刷新在值爲2的狀況也每秒發生一次。咱們必須注意到,由於進程安排問題,每秒一次的刷新不是100%保證每秒都發生。你能夠經過設置這個值不爲1來得到較好的性能,但隨之你會在一次崩潰中損失二分之一價值的事務。若是你設置這個值爲0,那麼任何mysqld進程的崩潰會刪除崩潰前最後一秒的事務,若是你設置這個值爲2,那麼只有操做系統崩潰或掉電纔會刪除最後一秒的事務。儘管如此,InnoDB的崩潰恢復不受影響,並且由於這樣崩潰恢復開始做用而不考慮這個值。注意,許多操做系統和一些磁盤硬件會欺騙刷新到磁盤操做。儘管刷新沒有進行,你能夠告訴mysqld刷新已經進行。即便設置這個值爲1,事務的持久程度不被保證,且在最壞狀況下掉電甚至會破壞InnoDB數據庫。在SCSI磁盤控制器中,或在磁盤自身中,使用有後備電池的磁盤緩存會加速文件刷新而且使得操做更安全。你也能夠試着使用Unix命令hdparm來在硬件緩存中禁止磁盤寫緩存,或使用其它一些對硬件提供商專用的命令。這個選項的默認值是1。 
相關文章
相關標籤/搜索