MySQL核心之雙一原則

2022-03-22 07:42:26 字數 1213 閱讀 3495

所謂的雙一就是指:

sync_binlog=1

;innodb_flush_log_at_trx_commit=1

innodb_flush_log_at_trx_commit和sync_binlog這兩個引數是控制mysql磁碟寫入策略以及資料安全性的關鍵引數。

innodb_flush_log_at_trx_commit表示log buffer寫入log file以及重新整理到磁碟的過程,

sync_binlog表示事務寫入binary log並使用fdatasync()函式同步到磁碟的過程。

1、對於innodb_flush_log_at_trx_commit來說

取值為0:log buffer每秒寫入日誌檔案log file並重新整理flush到磁碟。這種情況下,mysql的日誌刷寫操作和事務提交操作沒有關係。因此mysql的效能是最好的時刻。不過不安全

取值為1:每次事務提交時,log buffer會被寫入到日誌檔案並且還要刷寫到磁碟上。由於每次事務都要提交到i/o裝置,因此會慢一點,不過是最安全的。

取值為2:0和1的中間效果,即每次的事務提交會寫入log buffer,而刷寫到磁碟則是一秒進行一次。效能屬於一般。

2、對於sync_binlog來說:

取值為0:mysql自己不主動同步,依賴作業系統本身不定期把檔案內容重新整理到磁碟。效能最佳

取值為1:每次事務提交後將binlog_cache中的資料強制寫入磁碟bin log日誌中,是最慢的,但是最安全

取值 >1:當進行n次事務提交後,mysql將binlog_cache中的資料強制寫入磁碟中。

當兩個引數都設為1,這適用於那些資料安全要求比較高的場合,同時要求磁碟等也比較好才行。

對於重做日誌redo log和二進位制bin log的區別是什麼,我們有必要說一下:

1

)二進位制日誌會記錄所有與mysql有關的日誌記錄,包括innodb等其他儲存引擎的日誌,而innodb儲存引擎的重做日誌只記錄有關其本身的事務日誌,

2)記錄的內容不容,不管你將二進位制日誌檔案記錄的格式設為哪一種,其記錄的都是關於乙個事務的具體操作內容,而innodb儲存引擎的重做日誌檔案記錄的關於每個頁的更改的物理情況;

3)寫入的時間也不同,二進位制日誌檔案是在事務提交前進行記錄的,而在事務進行的過程中,不斷有重做日誌條目被寫入重做日誌檔案中。

設計原則之單一職責原則

無論是什麼設計原則,全部都是圍繞 專案的生命週期 和 高內聚,低耦合 這兩個關鍵字。定義 單一職責原則 srp single responsibility principle 又稱單一功能原則,它規定了乙個類應該只有乙個發生變化的原因,即乙個類只負責一項職責。字面上很好理解,但是如果做起來卻很難做到...

設計原則之單一職責原則

什麼是單一職責原則 定義 有且僅有乙個使介面或類產生變化的原因。也就是說我們使類或介面變化,只能有乙個理由。但是在實際開發的過程中,我們很容易做到介面單一職責,很難做到類單一職責。例如 我們以查詢資料,處理資料,返回資料為例。如果我們這樣設計乙個介面 public inte ce iuserbo p...

基礎原則之單一職責原則

一 什麼是srp srp是 single responsibility principle 單一職責原則 的簡稱 乙個類只有乙個促使它變化的原因。所謂職責,我們可以理解它為功能,就是設計的這個類功能應該只有乙個,而不是兩個或更多。也可以理解為引用變化的原因,當你發現有兩個變化會要求我們修改這個類,那...