mysql binlog过期策略_MySQL binlog日志优化方案
Binlog 相關(guān)參數(shù)及優(yōu)化策略 我們首先看看Binlog 的相關(guān)參數(shù),通過執(zhí)行如下命令可以獲得關(guān)于Binlog 的相關(guān)參數(shù)。當(dāng)然,其中也顯示出了“ innodb_locks_unsafe_for_binlog”這個(gè)Innodb 存儲(chǔ)引擎特有的與Binlog 相關(guān)的參數(shù): mysql show variables like '%binlo
Binlog 相關(guān)參數(shù)及優(yōu)化策略
我們首先看看Binlog 的相關(guān)參數(shù),通過執(zhí)行如下命令可以獲得關(guān)于Binlog 的相關(guān)參數(shù)。當(dāng)然,其中也顯示出了“ innodb_locks_unsafe_for_binlog”這個(gè)Innodb 存儲(chǔ)引擎特有的與Binlog 相關(guān)的參數(shù):
mysql> show variables like '%binlog%';
+--------------------------------+------------+
| Variable_name | Value |
+--------------------------------+------------+
| binlog_cache_size | 1048576 |
| innodb_locks_unsafe_for_binlog | OFF |
| max_binlog_cache_size | 4294967295 |
| max_binlog_size | 1073741824 |
| sync_binlog | 0 |
+--------------------------------+------------+
“binlog_cache_size":在事務(wù)過程中容納二進(jìn)制日志SQL 語句的緩存大小。二進(jìn)制日志緩存是服務(wù)器支持事務(wù)存儲(chǔ)引擎并且服務(wù)器啟用了二進(jìn)制日志(—log-bin 選項(xiàng))的前提下為每個(gè)客戶端分配的內(nèi)存,注意,是每個(gè)Client 都可以分配設(shè)置大小的binlog cache 空間。如果讀者朋友的系統(tǒng)中經(jīng)常會(huì)出現(xiàn)多語句事務(wù)的華,可以嘗試增加該值的大小,以獲得更好的性能。當(dāng)然,我們可以通過MySQL 的以下兩個(gè)狀態(tài)變量來判斷當(dāng)前的binlog_cache_size 的狀況:Binlog_cache_use
和Binlog_cache_disk_use?!癿ax_binlog_cache_size”:和"binlog_cache_size"相對(duì)應(yīng),但是所代表的是binlog 能夠使用的最大cache 內(nèi)存大小。當(dāng)我們執(zhí)行多語句事務(wù)的時(shí)候,max_binlog_cache_size 如果不夠大的話,系統(tǒng)可能會(huì)報(bào)出“ Multi-statement transaction required more than 'max_binlog_cache_size' bytes ofstorage”的錯(cuò)誤。
“max_binlog_size”:Binlog 日志最大值,一般來說設(shè)置為512M 或者1G,但不能超過1G。該大小并不能非常嚴(yán)格控制Binlog 大小,尤其是當(dāng)?shù)竭_(dá)Binlog 比較靠近尾部而又遇到一個(gè)較大事務(wù)的時(shí)候,系統(tǒng)為了保證事務(wù)的完整性,不可能做切換日志的動(dòng)作,只能將該事務(wù)的所有SQL 都記錄進(jìn)入當(dāng)前日志,直到該事務(wù)結(jié)束。這一點(diǎn)和Oracle 的Redo 日志有點(diǎn)不一樣,因?yàn)镺racle 的Redo 日志所記錄的是數(shù)據(jù)文件的物理位置的變化,而且里面同時(shí)記錄了Redo 和Undo 相關(guān)的信息,所以同一個(gè)事務(wù)是否在一個(gè)日志中對(duì)Oracle
來說并不關(guān)鍵。而MySQL 在Binlog 中所記錄的是數(shù)據(jù)庫邏輯變化信息,MySQL 稱之為Event,實(shí)際上就是帶來數(shù)據(jù)庫變化的DML 之類的Query 語句?!皊ync_binlog”:這個(gè)參數(shù)是對(duì)于MySQL 系統(tǒng)來說是至關(guān)重要的,他不僅影響到Binlog 對(duì)MySQL 所帶來的性能損耗,而且還影響到MySQL 中數(shù)據(jù)的完整性。對(duì)于“sync_binlog”參數(shù)的各種設(shè)置的說明如下:
● sync_binlog=0,當(dāng)事務(wù)提交之后,MySQL 不做fsync 之類的磁盤同步指令刷新binlog_cache 中的信息到磁盤,而讓Filesystem 自行決定什么時(shí)候來做同步,或者cache 滿了之后才同步到磁盤。
● sync_binlog=n,當(dāng)每進(jìn)行n 次事務(wù)提交之后,MySQL 將進(jìn)行一次fsync 之類的磁盤同步指令來將binlog_cache 中的數(shù)據(jù)強(qiáng)制寫入磁盤。在MySQL 中系統(tǒng)默認(rèn)的設(shè)置是sync_binlog=0,也就是不做任何強(qiáng)制性的磁盤刷新指令,這時(shí)候的性能是最好的,但是風(fēng)險(xiǎn)也是最大的。因?yàn)橐坏┫到y(tǒng)Crash,在binlog_cache 中的所有binlog 信息都會(huì)被丟失。而當(dāng)設(shè)置為“1”的時(shí)候,是最安全但是性能損耗最大的設(shè)置。因?yàn)楫?dāng)設(shè)置為1 的時(shí)候,即使系統(tǒng)Crash,也最多丟失binlog_cache
中未完成的一個(gè)事務(wù),對(duì)實(shí)際數(shù)據(jù)沒有任何實(shí)質(zhì)性影響。從以往經(jīng)驗(yàn)和相關(guān)測(cè)試來看,對(duì)于高并發(fā)事務(wù)的系統(tǒng)來說,“sync_binlog”設(shè)置為0 和設(shè)置為1 的系統(tǒng)寫入性能差距可能高達(dá)5 倍甚至更多。
本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!
總結(jié)
以上是生活随笔為你收集整理的mysql binlog过期策略_MySQL binlog日志优化方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js如何调用h5的日期控价_微信公众号支
- 下一篇: petapoco mysql_PetaP