innodb_flush_log_at_trx_commit和sync_binlog innodb_flush_method

rainbowbridg發表於2012-02-23

innodb_flush_log_at_trx_commit和sync_binlog innodb_flush_method的介紹

[@more@]

innodb_flush_log_at_trx_commit:控制了innodb將log buffer中的資料寫入日誌檔案並flush磁碟的時間點

    innodb_flush_log_at_trx_commit=0 日誌緩衝區(存放redo log)以每秒一次的頻率flush寫入日誌檔案,並對檔案描述符執行磁碟重新整理操作,但不會在事務執行期間進行任何處理
    innodb_flush_log_at_trx_commit=1 在每次執行事務時都將redo log buffer寫入日誌檔案,並對檔案描述符執行磁碟重新整理操作
    innodb_flush_log_at_trx_commit=2 在每次執行事務時都將redo log buffer寫入日誌檔案,但是不對其執行磁碟重新整理操作

innodb_flush_method:影響了伺服器flush資料或日誌檔案的方法。

    具體有三個選值:預設的default,innodb使用fsync()函式flush資料和日誌檔案;

    O_DIRECT,innodb使用O_DIRECT的方式開啟資料檔案,並使用fsync()函式flush資料和日誌檔案;

    O_DSYNC,innodb使用O_SYNC開啟並flush日誌檔案,使用fsync()函式flush資料檔案。

     注:在類unix作業系統中,檔案的開啟方式為O_DIRECT會最小化緩衝對io的影響,該檔案的io是直接在使用者空間的buffer上操作的, 並且io操作是同步的,因此不管是read()系統呼叫還是write()系統呼叫,資料都保證是從磁碟上讀取的;O_SYNC方式表示以同步io的方式 開啟檔案,任何寫操作都將阻塞到資料寫入物理磁碟後才返回。fsync(int filedes)函式只對由檔案描述符filedes指定的單一檔案起作用,並且等待寫磁碟操作結束,然後返回。fdatasync(int filedes)函式類似於fsync,但它隻影響檔案的資料部分。而除資料外,fsync還會同步更新檔案的元資訊到磁碟。

sync_binlog:

     sync_binlog=N表示每寫緩衝N次,就同步到磁碟,對於innodb事務,即使事務還未commit,sync_binlog=1時,還 會寫日誌。如果此時崩潰,這個事務會被回滾,但binlog已經記錄了該事務資訊,無法回滾。可以透過設定:innodb_support_xa=1解 決。

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

相關文章