国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySql中Binary Log的流程是啥

2024-07-24 12:33:28
字體:
供稿:網(wǎng)友
  Binary Log寫入流程
  我們首先還是先看看官方文檔對sync_binlog配置的描述。
 
  sync_binlog
 
  命令行格式 --sync-binlog=#
  系統(tǒng)變量 sync_binlog
  影響范圍 Global
  動態(tài)的 Yes
  SET_VAR提示適用 No
  類型 Integer
  默認值 1
  最小值 0
  最大值 2^32=4294967295
  控制 MySQL 服務(wù)器將二進制日志同步到磁盤的頻率。
 
  sync_binlog=0:禁用 MySQL 服務(wù)器將二進制日志同步到磁盤。相反,MySQL 服務(wù)器依賴操作系統(tǒng)不時將二進制日志刷新到磁盤,就像它對任何其他文件所做的那樣。此設(shè)置提供了最佳性能,但如果發(fā)生電源故障或操作系統(tǒng)崩潰,服務(wù)器可能已提交尚未刷盤的事務(wù)。
  sync_binlog=1:在提交事務(wù)之前啟用二進制日志到磁盤的同步。這是最安全的設(shè)置,但由于磁盤寫入次數(shù)增加,可能會對性能產(chǎn)生負面影響。在電源故障或操作系統(tǒng)崩潰的情況下,二進制日志中丟失的事務(wù)僅處于準備狀態(tài)。這允許常規(guī)自動恢復(fù)回滾事務(wù),從而保證不會從二進制日志中丟失事務(wù)。
  sync_binlog=N, 其中是 0 或 1 以外的值:收集到N個二進制日志提交組后,二進制日志會同步到磁盤。在電源故障或操作系統(tǒng)崩潰的情況下,服務(wù)器可能已經(jīng)提交了尚未刷新到二進制日志的事務(wù)。由于磁盤寫入次數(shù)增加,此設(shè)置可能會對性能產(chǎn)生負面影響。較高的值會提高性能,但會增加數(shù)據(jù)丟失的風(fēng)險。
  InnoDB為了在與事務(wù)一起使用 的復(fù)制設(shè)置中獲得最大可能的持久性和一致性,請使用以下設(shè)置:
 
  sync_binlog=1.
  innodb_flush_log_at_trx_commit=1.
  警告
 
  許多操作系統(tǒng)和一些磁盤硬件欺騙了刷新到磁盤操作。他們可能會告訴 mysqld已經(jīng)發(fā)生了刷新,即使它還沒有發(fā)生。在這種情況下,即使使用推薦的設(shè)置也無法保證事務(wù)的持久性,在最壞的情況下,斷電可能會損壞InnoDB數(shù)據(jù)。SCSI 磁盤控制器或磁盤本身中使用電池支持的磁盤緩存可加快文件刷新速度,并使操作更安全。您還可以嘗試禁用硬件緩存中磁盤寫入的緩存。
 
  小結(jié)
  sync_binlog設(shè)置類型為unsigned Integer。
  一般不會設(shè)置為0,0依賴系統(tǒng)操作不定時fsync,發(fā)生電源故障或者系統(tǒng)崩潰的時候比較危險——事務(wù)提交了但是Binary Log缺失了。
  設(shè)置為1比較安全,獲得最大可能的持久性和一致性,能保證后面的主從復(fù)制、恢復(fù)。但是對性能不利,當業(yè)務(wù)需要的IOPS不高可以設(shè)置。
  設(shè)置為大于1的值目的是提高性能不是一個事務(wù)提交就fsync下,相當于批量刷盤,是比較聰明的方式,但是如果出現(xiàn)電源故障或者系統(tǒng)崩潰的時候Binary Log缺失的會比較多。如果磁盤本身使用電池支持的磁盤緩存會比較安全。所以當業(yè)務(wù)需要的IOPS比較高時可以設(shè)置,但是一般也不會設(shè)置過大,可以在[100,1000]區(qū)間中。
  另外我們通過sync_binlog=0的描述其實我們也可以大概能感覺到,其實當事務(wù)提交的時候雖然沒有馬上fsync,但是其實是已經(jīng)write到文件系統(tǒng)的page cache中了,那么其實mysql在事務(wù)運行的時候也會有一個cache緩存在事務(wù)中產(chǎn)生的Binary Log。
 
  下面我們繼續(xù)看看Binary Log在事務(wù)運行時的cache相關(guān)配置。
 
  binlog_cache_size
  
  命令格式 --binlog-cache-size=#
  系統(tǒng)變量 binlog_cache_size
  范圍 Golbal
  動態(tài)的 Yes
  SET_VAR提示適用 No
  類型 Integer
  默認值 32768
  最小值 4096
  最大值(64位平臺) 2^64=18446744073709547520
  最大值(32位平臺) 2^32=4294967295
  塊大小 4096
  在事務(wù)期間保存二進制日志更改的內(nèi)存緩沖區(qū)的大小。該值必須是 4096 的倍數(shù)。
 
  在服務(wù)器上啟用二進制日志記錄( log_bin系統(tǒng)變量設(shè)置為 ON)時,如果服務(wù)器支持任何事務(wù)存儲引擎,則會為每個客戶端分配一個二進制日志緩存。如果事務(wù)的數(shù)據(jù)超出內(nèi)存緩沖區(qū)中的空間,超出的數(shù)據(jù)將存儲在臨時文件中。當服務(wù)器上的二進制日志加密處于活動狀態(tài)時,內(nèi)存緩沖區(qū)未加密,但(從 MySQL 8.0.17 開始)用于保存二進制日志緩存的任何臨時文件都被加密。提交每個事務(wù)后,通過清除內(nèi)存緩沖區(qū)并截斷臨時文件(如果使用)來重置二進制日志緩存。
 
  如果您經(jīng)常使用大型事務(wù),則可以通過減少或消除寫入臨時文件的需要來增加此緩存大小以獲得更好的性能。 Binlog_cache_use(服務(wù)狀態(tài)變量-使用Binary Log緩存的事務(wù)數(shù)量)和 Binlog_cache_disk_use (服務(wù)狀態(tài)變量-使用臨時二進制日志緩存但超過binlog_cache_size值并使用臨時文件存儲事務(wù)語句的事務(wù)數(shù)。)狀態(tài)變量可用于調(diào)整此變量的大小。請參閱第 5.4.4 節(jié),“二進制日志”。
 
  binlog_cache_size僅設(shè)置事務(wù)緩存的大?。徽Z句緩存的大小由 binlog_stmt_cache_size 系統(tǒng)變量控制。
 
  小結(jié)
  binlog_cache_size設(shè)置類型為unsigned Integer。
  用來指示每個事務(wù)期間用來緩存Binary Log的大小,默認為32k,必須是4096的倍數(shù)。如果超過這個值會使用臨時文件存儲。
  業(yè)務(wù)中盡量不要使用大事務(wù),如果事務(wù)過大需要考慮是否合理。一般不需要對binlog_cache_size進行修改,32k足夠了。
  binlog_cache_size不足夠的時候會使用臨時文件進行存儲,但是性能會變低,我們可以設(shè)置max_binlog_cache_size=binlog_cache_size這樣就不會使用臨時文件,下文會介紹。
  max_binlog_cache_size
  
  命令格式 --max-binlog-cache-size=#
  系統(tǒng)變量 max_binlog_cache_size
  范圍 Golbal
  動態(tài)的 Yes
  SET_VAR提示適用 No
  類型 Integer
  默認值 2^64=18446744073709547520
  最小值 4096
  最大值 2^64=18446744073709547520
  塊大小 4096
  如果一個事務(wù)需要超過這么多字節(jié)的內(nèi)存,服務(wù)器會生成一個多語句事務(wù)需要超過 'max_binlog_cache_size' 字節(jié)的存儲錯誤。最小值為 4096??赡艿淖畲笾禐?16EiB(exbibytes)。最大推薦值為4GB;這是因為 MySQL 目前無法處理大于 4GB 的二進制日志位置。該值必須是 4096 的倍數(shù)。
 
  max_binlog_cache_size僅設(shè)置事務(wù)緩存的大??;語句緩存的上限由 max_binlog_stmt_cache_size 系統(tǒng)變量控制。
 
  會話的可見性 max_binlog_cache_size匹配 binlog_cache_size系統(tǒng)變量的可見性;換句話說,更改其值只會影響更改值后啟動的新會話。
 
  總結(jié)
  max_binlog_cache_size是一個安全值,一般根據(jù)服務(wù)器可分配的內(nèi)存進行設(shè)置。
  概述
  從上面的配置,我們可以得出,Binary Log大致的寫入流程:
 
  事務(wù)改在運行時,放入每個事務(wù)的Binary Log緩存中。
  事務(wù)提交后根據(jù)配置來進行,如果是sync_binlog=1,則每次進行fsync,緩存會釋放。如果是sync_binlog=0,則會直接寫入系統(tǒng)文件的page cache,依賴于操作系統(tǒng)不時地將二進制日志刷盤。如果sync_binlog=N(N>1),則相當于批量刷盤,當然每個事務(wù)持有的binlog cache會進行釋放。

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 垫江县| 芒康县| 旬邑县| 台前县| 徐汇区| 勐海县| 馆陶县| 中阳县| 夏河县| 惠东县| 桐庐县| 临城县| 邳州市| 红原县| 昌江| 甘谷县| 柳江县| 从江县| 昭苏县| 儋州市| 定边县| 泸州市| 英德市| 凤阳县| 准格尔旗| 寿阳县| 交城县| 大关县| 恩平市| 武义县| 礼泉县| 鄂伦春自治旗| 阿拉善左旗| 东城区| 涪陵区| 西贡区| 斗六市| 靖州| 吉首市| 开江县| 枣阳市|