sync_binlog和innodb_flush_log_at_trx_commit解析
sync_binlog:
其值預設為0,範圍為0~4294967295(mysql 5.6)
〇 為0時,即mysqld不去控制磁碟的同步,而是等待作業系統的fdatasync從記憶體flush到磁碟。(與作業系統同步)。在複製結構中,dump執行緒會在flush階段進行binlog傳輸。
〇 最安全的設定為1,在開啟了autocommit的情況下,如果mysqld或者os此時crash掉,會至多遺失一個事務。(同時也是最慢的設定)。在複製結構中,dump執行緒會在sync階段進行binlog傳輸。
〇 當值為範圍內其他值時,如100,即意味著mysql在寫100次binlog時,再將快取刷到磁碟。在複製結構中,dump執行緒會在flush階段進行binlog傳輸。
將該值設定為稍大的情況下,可以提高tps,並且需要使用battery-backed cache防止異常斷電。
innodb_flush_log_at_trx_commit:
(控制REDO log刷盤策略)
其預設值為1,其他可取值為0和2。
〇 當為1時,每個事務提交,將會使log buffer的內容寫到log file中,同時將被flush到磁碟,這也是最安全的做法。可以完全遵從ACID。(the contents of the InnoDB log buffer are written out to the log file at each transaction commit and the log file is flushed to disk.)
〇 當為0時,每個事務提交,會寫入mysqld自己的log buffer中,每隔1秒將log buffer的內容寫到log file中,然後flush到磁碟。
〇 當為2時,每個事務提交,就會被寫到log file(OS cache),但是log file每隔1秒才會被flush到磁碟,當作業系統crash或斷電時,此時至多丟失1秒的事務。
0和2的區別是,
為0時,mysqld或作業系統crash則會導致1秒內的事務被丟失。
為2時,當作業系統crash或斷電會導致1秒內的事務被丟失。
效能而言(由快至慢):
0>2>1
安全性而言(由好至差):
1>2>0
圖自:楊奇龍
此外,這兩個引數都是Dynamic Variable,修改其值不需要重啟mysqld。
參考文件:
〇 【MySQL】sync_binlog innodb_flush_log_at_trx_commit 淺析 —— 楊奇龍
〇 MySQL 5.6 Reference Manual Chapter 5 MySQL Server Administration sync_binlog & innodb_flush_log_at_trx_commit
作者微信公眾號(持續更新)
其值預設為0,範圍為0~4294967295(mysql 5.6)
〇 為0時,即mysqld不去控制磁碟的同步,而是等待作業系統的fdatasync從記憶體flush到磁碟。(與作業系統同步)。在複製結構中,dump執行緒會在flush階段進行binlog傳輸。
〇 最安全的設定為1,在開啟了autocommit的情況下,如果mysqld或者os此時crash掉,會至多遺失一個事務。(同時也是最慢的設定)。在複製結構中,dump執行緒會在sync階段進行binlog傳輸。
〇 當值為範圍內其他值時,如100,即意味著mysql在寫100次binlog時,再將快取刷到磁碟。在複製結構中,dump執行緒會在flush階段進行binlog傳輸。
將該值設定為稍大的情況下,可以提高tps,並且需要使用battery-backed cache防止異常斷電。
innodb_flush_log_at_trx_commit:
(控制REDO log刷盤策略)
其預設值為1,其他可取值為0和2。
〇 當為1時,每個事務提交,將會使log buffer的內容寫到log file中,同時將被flush到磁碟,這也是最安全的做法。可以完全遵從ACID。(the contents of the InnoDB log buffer are written out to the log file at each transaction commit and the log file is flushed to disk.)
〇 當為0時,每個事務提交,會寫入mysqld自己的log buffer中,每隔1秒將log buffer的內容寫到log file中,然後flush到磁碟。
〇 當為2時,每個事務提交,就會被寫到log file(OS cache),但是log file每隔1秒才會被flush到磁碟,當作業系統crash或斷電時,此時至多丟失1秒的事務。
0和2的區別是,
為0時,mysqld或作業系統crash則會導致1秒內的事務被丟失。
為2時,當作業系統crash或斷電會導致1秒內的事務被丟失。
效能而言(由快至慢):
0>2>1
安全性而言(由好至差):
1>2>0
圖自:楊奇龍
此外,這兩個引數都是Dynamic Variable,修改其值不需要重啟mysqld。
參考文件:
〇 【MySQL】sync_binlog innodb_flush_log_at_trx_commit 淺析 —— 楊奇龍
〇 MySQL 5.6 Reference Manual Chapter 5 MySQL Server Administration sync_binlog & innodb_flush_log_at_trx_commit
作者微信公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-2072954/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql sync_binlog和 innodb_flush_log_at_trx_commitMySqlMIT
- innodb_flush_log_at_trx_commit和sync_binlog innodb_flush_methodMIT
- 【MySQL】sync_binlog innodb_flush_log_at_trx_commit 淺析MySqlMIT
- 【MySQL】五、sync_binlog innodb_flush_log_at_trx_commit 淺析MySqlMIT
- innodb_flush_method和innodb_flush_log_at_trx_commitMIT
- innodb_flush_log_at_trx_commitMIT
- mysql的sync_binlog引數實驗MySql
- mysql8.0插入慢之sync_binlog(一)MySql
- mysql效能引數innodb_flush_log_at_trx_commitMySqlMIT
- MySQL 5.7中sync_binlog引數和半同步中after_commit和after_sync的區別MySqlMIT
- DOM解析和SAX解析
- 軟解析和硬解析
- innodb_flush_log_at_trx_commit引數的直白理解MIT
- MysqL 主從事務資料安全之sync_binlogMySql
- ORACLE SQL解析之硬解析和軟解析OracleSQL
- ORACLE 硬解析和軟解析 軟軟解析Oracle
- MysqL 磁碟寫入策略之innodb_flush_log_at_trx_commitMySqlMIT
- mysql的innodb_flush_log_at_trx_commit引數實驗MySqlMIT
- MySQL 備庫可以設定 sync_binlog 非 1 嗎?【轉】MySql
- Oracle的硬解析和軟解析Oracle
- dom解析和sax解析的區別
- Oracle SQL的硬解析和軟解析OracleSQL
- MySQL:Innodb:innodb_flush_log_at_trx_commit引數影響的位置MySqlMIT
- 深度解析 Delegate 和 Notification 和 KVO
- 硬解析和物理讀取與軟解析和邏輯讀取
- Java equals 和 == 完全解析Java
- Java equals和==完全解析Java
- 名稱解析和Pam
- DOM解析和優化優化
- Redo 和 Undo 概念解析
- HashMap和HashSet深度解析HashMap
- Checkpoint和SCN的解析
- mysql插入慢之所innodb_flush_log_at_trx_commit引數的意義MySqlMIT
- 關於對innodb_flush_log_at_trx_commit引數的一些理解MIT
- Oracle的軟解析(soft prase)和硬解析(hard prase)Oracle
- DNS遞迴解析和迭代解析的區別-VeCloudDNS遞迴Cloud
- Exists和IN的原理解析
- 域名解析和cdn 原理