主頁 > 資料庫 > [翻譯]——MySQL Server Variable: sync_binlog (Doc ID 1501926.1)

[翻譯]——MySQL Server Variable: sync_binlog (Doc ID 1501926.1)

2020-12-22 10:32:16 資料庫

 

本文對MySQL Server Variable: sync_binlog (Doc ID 1501926.1)這篇文章進行了翻譯,如有翻譯不當或錯誤的地方敬請指正,

 

  譯文地址:https://www.cnblogs.com/kerrycode/p/14167941.html

 

In this Document

Purpose

Scope

Details

   Performance Impact of sync_binlog

   Recommendation

References

clip_image002[8]

APPLIES TO:

MySQL Server - Version 4.1 to 5.6 [Release 4.1 to 5.6]
Information in this document applies to any platform.


PURPOSE

Explain when and why to use the sync_binlog setting in MySQL Server.

解釋在MySQL Server中什么時候設定引數sync_binglog以及為什么要設定引數sync_binglog

SCOPE

Detailed general guidance for DBAs who are familiar with the option and looking for help on how to use it.

針對熟悉該選項或尋求有關使用該選項使用幫助的DBA的詳細的一份常規指南,

DETAILS

The sync_binlog setting was added in MySQL 4.1.3 and specifies how often MySQL Server synchronizes its binary log to disk. The supported values are 0 and larger with the maximum value being 4294967295 on 32-bit platform and 18446744073709547520 on 64-bit platforms. The meaning of the value of sync_binlog is:

MySQL 4.1.3開始新增了sync_binlog引數設定,它控制了MySQL Server將其二進制日志同步到磁盤的頻率, 在32位平臺上,它支持的取值范圍為04294967295,最大值為4294967295,在64位平臺上,它支持的取值范圍為018446744073709547520,最大值為18446744073709547520 sync_binlog的值的含義如下:

In the following the word transaction is used even if not all storage engines support transactions. For those storage engine replace transaction with statement.

  • sync_binlog = 0: This is the default in MySQL 5.6 and earlier as well as MySQL 5.7.6 and earlier. In this case MySQL relies on the operating system to flush the binary log from time to time. This gives the best performance, but if MySQL crashes the binary log will likely be missing several transactions and it will generally be necessary to reload the slave to ensure they are in sync with the master.
  • sync_binlog = 1: This it the default in MySQL 5.7.7 and later. It is the safest value and recommended value. However particularly in MySQL 5.5 and earlier it is also the value with the largest performance impact (see also below). With this value the binary log is synchronized to disk using fdatasync() after every transaction. In MySQL 5.6 and later, this guarantees that in case of a crash, no transactions will be missing in the binary log. In MySQL 5.5 and earlier up to one transaction can be missing.
  • sync_binlog > 1: In this case the synchronization to disk is done for every sync_binlog transactions.

在下文中,即使并非所有存盤引擎都支持事務,但是統一使用事務一詞,對于那些不支持事務的存盤引擎,請用陳述句(statement)替換事務,

·         sync_binlog = 0:這是MySQL 5.6和更低版本以及MySQL 5.7.6和更低版本中的默認設定,在這種情況下,MySQL依賴作業系統不時重繪二進制日志到磁盤(直接由作業系統的檔案系統自己控制它的快取的重繪),這樣可以提供最佳性能,但是如果MySQL突然崩潰,二進制日志可能會丟失一些事務,因此通常需要重新加載從屬服務器以確保它們與主服務器同步,

·         sync_binlog = 1:這是MySQL 5.7.7及更高版本的默認設定,這個是最安全的推薦值,但是,特別是在MySQL 5.5和更早的版本中,它也是對性能影響最大的值(請參見下文),使用此值,在每次事務之后,二進制日志將呼叫fdatasync()同步到磁盤,在MySQL 5.6和更高版本中,這保證了在MySQL崩潰的情況下,二進制日志中不會丟失任何事務,在MySQL 5.5和更早的版本中,最多可能丟失一個事務的資料,

·         sync_binlog> 1:在這種情況下,每sync_binlog個值的事務后會完成與磁盤的同步,(如果sync_binlog值為2,意味著2個事務后完成磁盤同步,依此類推)

譯者注釋:

sync_binlog=0,表示 MySQL 不控制binlog的重繪,由檔案系統自己控制它的快取的重繪,這時候的性能是最好的,但是風險也是最大的,因為一旦系統Crash,在 binlog_cache 中的所有 binlog 資訊都會被丟失,

sync_binlog=1,多個事務同時提交,雖然binlog是順序IO,它同樣很大的影響MySQL 和 IO 性能,雖然可以通過 group commit 的補丁緩解,但是重繪的頻率過高對 IO 的影響也非常大,對于高并發事務的系統來說,有些文章介紹sync_binlog 設定為 0 和設定為 1 的系統寫入性能差距可能高達 5 倍甚至更多,

 

 

If you are primarily using InnoDB as the storage engine, you should also consider the value of innodb_flush_log_at_trx_commit. If innodb_flush_log_at_trx_commit is set to 2 or 0, flushing of the InnoDB log files to disk is delayed and in that case, it may also be acceptable to delay the flushing of the binary log.

 

如果你主要使用InnoDB作為存盤引擎,你應該也要考慮系統變數innodb_flush_log_at_trx_commit的值,如果系統變數innodb_flush_log_at_trx_commit設定為02,則會延遲將InnoDBredo日志重繪到磁盤,在這種情況下,也可能延遲重繪二進制日志,

 

sync_binlog的性能影響

Using MySQL 5.0 through 5.5 but not 5.6 and later, there's one important performance effect of setting sync_binlog to any value other than 0. It disables InnoDB concurrent transaction commit (group commit), slowing down transaction throughput. This makes it preferable to mostly use the 0 setting in cases where performance matters.

使用MySQL 5.05.5而不是5.6及更高的MySQL版本,將sync_binlog設定為0以外的任何值都會產生嚴重的性能影響,它會禁用InnoDB并發事務提交(組提交),從而降低事務吞吐量,因此,在性能很重要的情況下,最好使用0設定,

Any of the sync times greater than 0 has the advantage that the OS won't cache lots of the log, so there won't be a corresponding big burst of disk I/O when the flush for a whole gigabyte of log happens. You can mitigate that effect by setting max_binlog_size to say 100M.

任何sync_binlog值大于0的同步設定都有一個優點,即作業系統不會快取大量的二進制日志,因此,當重繪整個1Gb大小的二進制日志時,不會有相應的磁盤I/O大量爆發,您可以通過將max_binlog_size設定更小的值,例如100M來減輕這種影響,

The best solution is to use a write caching disk controller with battery backup. This will greatly improve performance for both binary log and InnoDB fsyncs. Even better, have that caching write to an SSD.

最好的解決方案是使用帶有電池備份的寫快取磁盤控制器,這將大大提高二進制日志和InnoDB fsync的性能,更好的方案是將快取寫入SSD

 

建議

To provide the best safety of the data and to minimize the chance of a corrupted binary log, set the value of sync_binlog to 1:

為了提供最佳的資料安全性并最大程度地減少二進制日志損壞的可能性,請將sync_binlog的值設定為1

[mysqld]
sync_binlog = 1

 

If performance is paramount use a value of 0 or greater than 1. If you don't need concurrent transaction commits you could set sync_binlog = 10 instead of 1. Or 100. That will reduce the number of fsyncs to one tenth or one hundredth of the current rate. Or 1000. An optimal balance between performance and durability could then perhaps depend on your transaction rate. If you average ten transactions per second and want to average one flush per second you could set it to 10.

如果性能至關重要,請使用0或大于1的值,如果不需要并發事務提交(組提交),你可以將sync_binlog = 10而不是1100.這會將呼叫fsync的數量減少到當前數量的十分之一或百分之一,甚至有可能是千分之一,性能和可靠性之間的最佳平衡可能取決于您的事務的速度,如果您平均每秒進行十次事務處理,并且希望平均每秒進行一次重繪,則可以將引數sync_binlog設定為10

You can get more tricky by observing that sync_binlog is a dynamic variable, so you can change it at runtime. You could set it to 0 most of the time to get concurrent transaction commits. Then you could have a cron job that changes it to 10 for a few seconds, so MySQL probably will do an fsync, then go back to the faster 0 setting.

通過觀察,你會發現sync_binlog是一個動態變數,可以在運行時動態進行更改,這將變得更加棘手,您通常可以在大部分時間將其設定為0,以獲取并發事務提交,然后您可能會通過執行cron作業,將其更改為10或其它值,因此MySQL可能會執行fsync,然后回傳到更快的0設定,

 

Another good solution is to purchase a small SSD and use that for the binary logs and InnoDB logs as well as possibly for temporary files. The large number of flushes and writes mean that the expected lifetime of the drive will be quite short, a year or two, perhaps significantly less. But it's easy and cheaper than a write caching controller.

另一個好的解決方案是購買一個小的SSD,并將其用于二進制日志和InnoDBredo日志以及可能用到的臨時檔案,大量的重繪和寫入意味著SSD驅動器的預期壽命將會很短,有可能一到兩年,甚至可能更少,但是它比寫快取控制器更容易,更便宜,

It's also of use to consider the cases in which you might need the binary log. The most important one would be if a power outage or some other mishap corrupted your data files or disks irretrievably. That is uncommon but it does happen sometimes. InnoDB is normally safe against simple power outages, provided drive write caching is turned off (and if you use a caching controller, provided it has and uses its battery). So you could pick either innodb_flush_log_at_trx_commit = 1 or sync_binlog =1 to handle the uncommon case, while still being faster in normal use.

在考慮可能需要二進制日志的情況下,它也是很有用,最重要的是在發生斷電或其他一些意外損壞了您的資料檔案或磁盤的情況下,雖然這并不常見,但有時也確實會發生,如果驅動器寫快取已關閉(如果使用快取控制器,并且它配備有電池),那么簡單的停電的情況下,InnoDB通常也是安全的,因此,您可以選擇設定引數innodb_flush_log_at_trx_commit = 1sync_binlog = 1來防止不常見的情況,同時在正常使用下仍然可以更快地處理,

 

A replication slave server provides a great deal of protection, covering you against single machine failures. MySQL 5.5 and later offers the option to have semi-synchronous replication, which will block the client until the transaction has made it to at least one slave (unless no slaves confirms within rpl_semi_sync_master_timeout milliseconds). Without semi-synchronous replication, it's normal for the I/O thread of the replication slave servers to be only milliseconds behind their master unless they are heavily loaded and for many cases that will be sufficient protection against failure of the master server's disks. The SQL thread is what is usually considered when discussing replication lag, but that delay doesn't matter for protection, just the I/O thread. You can also configure the slave to have robust durability settings without affecting master performance.

復制的從庫提供了很多保護,可以防止單機故障, MySQL 5.5及更高版本提供了具有半同步復制的選項,它將阻塞客戶端的事務提交,直到事務至少已經復制到一個從庫為止(除非沒有從庫在rpl_semi_sync_master_timeout引數指定的時間(毫秒)內進行確認),譯者注:主庫在執行完客戶端提交的事務后不是立刻回傳給客戶端,而是等待至少一個從庫接收到并寫到relay log中才回傳給客戶端,如果沒有半同步復制,復制的從庫的I/O執行緒通常要比其主庫落后幾毫秒,除非它們的負載很重,在許多情況下,即使主服務器磁盤發生故障,它都能提供足夠的保護,SQL執行緒是討論復制延遲時通常要考慮的,但是這種延遲對于資料保護并不重要,僅對I/O執行緒很重要,您還可以配置從庫以具有可靠的持久性設定,而不會影響主服務器的性能

譯者注:這里將slave server翻譯成從庫,而不是從屬服務器,從習慣上跟自然一點

 

REFERENCES

https://dev.mysql.com/doc/refman/en/replication-options-master.html#sysvar_rpl_semi_sync_master_timeout
NOTE:1450190.1
- How to Recover From a Replication Error?
NOTE:1375415.1
- Error: Error In Log_event::Read_log_event(): 'Event Too Big', Data_len: Event_type:
NOTE:1024111.1
- MEM Warning: Binary Logging Not Synchronized To Disk At Each Write
NOTE:1024113.1
- InnoDB log buffer flushes to disk after each transaction
https://dev.mysql.com/doc/refman/en/replication-options-binary-log.html#sysvar_sync_binlog
https://dev.mysql.com/doc/refman/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
https://dev.mysql.com/doc/refman/en/glossary.html#glos_group_commit
https://dev.mysql.com/doc/refman/en/replication-options-binary-log.html#sysvar_max_binlog_size
https://dev.mysql.com/doc/refman/en/replication-semisync.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/238467.html

標籤:其他

上一篇:Mysql查看執行計劃及索引使用

下一篇:MySQL 資料完整性

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more