mysql的雙1設置

摘要:mysql

網易遊戲《爐石傳說》遊戲數據庫發生宕機並引起數據丟失事故,最終決定回檔並後續補償玩家損失。詳情可見官網公告:http://hs.blizzard.cn/articles/16/8565. 有大神分析形成數據庫損壞,若是也用MySQL數據庫的話,看起來應該是沒開啓雙1設置,咱們瞭解一下什麼是雙1設置。sql

innodb_flush_log_at_trx_commit和sync_binlog 兩個參數是控制MySQL 磁盤寫入策略以及數據安全性的關鍵參數。本文從參數含義,性能,安全角度闡述兩個參數爲不一樣的值時對db 性能,數據的影響.數據庫

一 參數意義 innodb_flush_log_at_trx_commit 若是innodb_flush_log_at_trx_commit設置爲0,log buffer將每秒一次地寫入log file中,而且log file的flush(刷到磁盤)操做同時進行.該模式下,在事務提交的時候,不會主動觸發寫入磁盤的操做。 若是innodb_flush_log_at_trx_commit設置爲1,每次事務提交時MySQL都會把log buffer的數據寫入log file,而且flush(刷到磁盤)中去. 若是innodb_flush_log_at_trx_commit設置爲2,每次事務提交時MySQL都會把log buffer的數據寫入log file.可是flush(刷到磁盤)操做並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁盤)操做。 注意: 因爲進程調度策略問題,這個「每秒執行一次 flush(刷到磁盤)操做」並非保證100%的「每秒」。緩存

sync_binlog sync_binlog 的默認值是0,像操做系統刷其餘文件的機制同樣,MySQL不會同步到磁盤中去而是依賴操做系統來刷新binary log。 當sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進制日誌binary log時,會使用fdatasync()函數將它的寫二進制日誌binary log同步到磁盤中去。 注: 若是啓用了autocommit,那麼每個語句statement就會有一次寫操做;不然每一個事務對應一個寫操做。 根據上述描述,我作了一張圖,能夠方便你們查看。安全

二 性能 兩個參數在不一樣值時對db的純寫入的影響表現以下:服務器

測試場景1 innodb_flush_log_at_trx_commit=2 sync_binlog=1000async

測試場景2 innodb_flush_log_at_trx_commit=1 sync_binlog=1000函數

測試場景3 innodb_flush_log_at_trx_commit=1 sync_binlog=1性能

測試場景4 innodb_flush_log_at_trx_commit=1 sync_binlog=1000測試

測試場景5 innodb_flush_log_at_trx_commit=2 sync_binlog=1000

場景 TPS 場景1 41000 場景2 33000 場景3 26000 場景4 33000 因而可知,當兩個參數設置爲雙1的時候,寫入性能最差,sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 時,(在當前模式下)MySQL的寫操做才能達到最高性能。

三 安全 當innodb_flush_log_at_trx_commit和sync_binlog 都爲 1 時是最安全的,在mysqld 服務崩潰或者服務器主機crash的狀況下,binary log 只有可能丟失最多一個語句或者一個事務。可是魚與熊掌不可兼得,雙11 會致使頻繁的io操做,所以該模式也是最慢的一種方式。 當innodb_flush_log_at_trx_commit設置爲0,mysqld進程的崩潰會致使上一秒鐘全部事務數據的丟失。 當innodb_flush_log_at_trx_commit設置爲2,只有在操做系統崩潰或者系統掉電的狀況下,上一秒鐘全部事務數據纔可能丟失。

雙1適合數據安全性要求很是高,並且磁盤IO寫能力足夠支持業務,好比訂單,交易,充值,支付消費系統。雙1模式下,當磁盤IO沒法知足業務需求時 好比11.11 活動的壓力。推薦的作法是 innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N爲500 或1000) 且使用帶蓄電池後備電源的緩存cache,防止系統斷電異常。

四 小結 系統性能和數據安全是業務系統高可用穩定的必要因素。咱們對系統的優化須要尋找一個平衡點,合適的纔是最好的,根據不一樣的業務場景需求,能夠將兩個參數作組合調整,以即是db系統的性能達到最優化。

相關文章
相關標籤/搜索