Mysql數(shù)據(jù)庫中的redo?log?寫入策略和binlog?寫入策略
redo log的寫入策略
InnoDB提供了innodb_flush_log_at_trx_commit參數(shù),它有三種可能取值:
- 設(shè)置為
0
的時候,表示每次事務(wù)提交時都只是把redo log
留在redo log buffer
中; - 設(shè)置為
1
的時候,表示每次事務(wù)提交時都將redo log
直接持久化到磁盤; - 設(shè)置為
2
的時候,表示每次事務(wù)提交時都只是把redo log
寫到page cache
。
查看mysql變量:show VARIABLES LIKE 'innodb_flush_log_at_trx_commit'
binlog的寫入策略
binlog的寫入策略,write 和fsync的時機,是由參數(shù)sync_binlog控制的:
sync_binlog=0
的時候,表示每次提交事務(wù)都只write
,不fsync
;sync_binlog=1
的時候,表示每次提交事務(wù)都會執(zhí)行fsync
;sync_binlog=N(N>1)
的時候,表示每次提交事務(wù)都write
,但累積N
個事務(wù)后才fsync
。
因此,在出現(xiàn)IO瓶頸的場景里,將sync_binlog
設(shè)置成一個比較大的值,可以提升性能。在實際的業(yè)務(wù)場景中,考慮到丟失日志量的可控性,一般不建議將這個參數(shù)設(shè)成0
,比較常見的是將其設(shè)置為100~1000中的某個數(shù)值。
但是,將sync_binlog
設(shè)置為N
,對應(yīng)的風險是:如果主機發(fā)生異常重啟,會丟失最近N
個事務(wù)的binlog
日志。
生產(chǎn)配置
通常情況下,生產(chǎn)都是" 雙1 "的配置
,也就是sync_binlog
和 innodb_flush_log_at_trx_commit
的配置都是1
,也就是說,一個事務(wù)完整提交前,需要等待兩次刷盤,一次是redo log
,一次是binlog
。
性能瓶頸
如果你的MySQL現(xiàn)在出現(xiàn)了性能瓶頸,而且瓶頸在IO上,可以通過哪些方法來提升性能呢?
針對這個問題,可以考慮以下三種方法:
- 設(shè)置
binlog_group_commit_sync_delay
和binlog_group_commit_sync_no_delay_count
參數(shù),減少binlog的寫盤次數(shù)。這個方法是基于“額外的故意等待”來實現(xiàn)的,因此可能會增加語句的響應(yīng)時間,但沒有丟失數(shù)據(jù)的風險。 - 將
sync_binlog
設(shè)置為大于1的值(比較常見是100~1000)。這樣做的風險是,主機掉電時會丟binlog日志。 - 將
innodb_flush_log_at_trx_commit
設(shè)置為2。這樣做的風險是,主機掉電的時候會丟數(shù)據(jù)。
我不建議你把innodb_flush_log_at_trx_commit
設(shè)置成0。因為把這個參數(shù)設(shè)置成0,表示redo log
只保存在內(nèi)存中,這樣的話MySQL本身異常重啟也會丟數(shù)據(jù),風險太大。而redo log
寫到文件系統(tǒng)的page cache
的速度也是很快的,所以將這個參數(shù)設(shè)置成2
跟設(shè)置成0
其實性能差不多,但這樣做MySQL異常重啟時就不會丟數(shù)據(jù)了,相比之下風險會更小。
到此這篇關(guān)于Mysql redo log 寫入策略和binlog 寫入策略的文章就介紹到這了,更多相關(guān)Mysq寫入策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql explain的用法(使用explain優(yōu)化查詢語句)
mysql explain可以幫助你檢查索引和更好的優(yōu)化查詢語句,今天特地學(xué)習(xí)了下mysql explain的用法,需要的朋友可以參考下2017-01-01優(yōu)化mysql數(shù)據(jù)庫的經(jīng)驗總結(jié)
本篇文章是對優(yōu)化mysql數(shù)據(jù)庫的經(jīng)驗進行了詳細的總結(jié)介紹,需要的朋友參考下2013-06-06MySQL8.0?索引優(yōu)化invisible?index詳情
這篇文章主要介紹了MySQL8.0?索引優(yōu)化invisible?index詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09通過DML更新MySQL數(shù)據(jù)庫數(shù)據(jù)的示例代碼
這篇文章主要給大家介紹了如何通過DML更新MySQL數(shù)據(jù)庫的數(shù)據(jù),通過DML來對數(shù)據(jù)庫種地表的數(shù)據(jù)記錄進行增刪改查操作,文中給大家了詳細的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下2024-01-01安裝和使用percona-toolkit來輔助操作MySQL的基本教程
這篇文章主要介紹了安裝和使用percona-toolkit來輔助操作MySQL的基本教程,這里舉了五個最常見的命令用法,需要的朋友可以參考下2015-11-11