關於對innodb_flush_log_at_trx_commit引數的一些理解

chenfeng發表於2017-03-24
當這個引數被設定為0,日誌緩衝每秒一次地被寫到日誌檔案,並且對日誌檔案做到磁碟操作的重新整理,但是在一個事務提交不做任何操作。當這個值為1(預設值)之時,在每個事務提交時,日誌緩衝被寫到日誌檔案,對日誌檔案做到磁碟操作的 重新整理。
當設定為2之時,在每個提交,日誌緩衝被寫到檔案,但不對日誌檔案做到磁碟操作的重新整理。MySQL在對日誌檔案的重新整理每秒發生一次。我們必須注意到,因為程式安排問題,每秒一次的重新整理不是100%保證每秒都發生。你可以透過設定這個值不為1來獲得較好的效能,
但隨之你會在一次崩潰中損失二分之一價值的事務。如果你設定這個值為0,那麼任何mysqld程式的崩潰會刪除崩潰前最後一秒的事務,如果我們設定這個值為2,那麼只有作業系統崩潰或掉電才會刪除最後一秒的事務。
儘管如此,InnoDB的崩潰恢復不受影響,而且因為這樣崩潰恢復開始作用而不考慮這個值。注意,許多作業系統和一些磁碟硬體會欺騙重新整理到磁碟操作。儘管重新整理沒有進行,你可以告訴mysqld重新整理已經進行。
即使設定這個值為1,事務的持久程度不被保證,且在最壞情況下掉電甚至會破壞InnoDB資料庫。在SCSI磁碟控制器中,或在磁碟自身中,使用有後備電池的磁碟快取會加速檔案 重新整理並且使得操作更安全。你也可以試著使用Unix命令hdparm來在硬體快取中禁止磁碟寫快取,
或使用其它一些對硬體提供商專用的命令。這個選項的 預設值是1。

該引數簡單歸納如下:
引數innodb_flush_log_at_trx_commit:
    =0 :每秒 write os cache & flush disk
    =1 :每次commit都 write os cache & flush disk
    =2 :每次commit都 write os cache,然後根據innodb_flush_log_at_timeout引數(預設為1s) flush disk


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2135988/,如需轉載,請註明出處,否則將追究法律責任。

相關文章