程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL主從分歧步延遲道理剖析及處理計劃

MYSQL主從分歧步延遲道理剖析及處理計劃

編輯:MySQL綜合教程

MYSQL主從分歧步延遲道理剖析及處理計劃。本站提示廣大學習愛好者:(MYSQL主從分歧步延遲道理剖析及處理計劃)文章只能為提供參考,不一定能成為您想要的結果。以下是MYSQL主從分歧步延遲道理剖析及處理計劃正文


1. MySQL數據庫主從同步延遲道理。
要說延時道理,得從mysql的數據庫主從復制道理說起,mysql的主從復制都是單線程的操作,
主庫對一切DDL和DML發生binlog,binlog是次序寫,所以效力很高,slave的Slave_IO_Running線程到主庫取日記,效力很比擬高,下一步,成績來了,slave的Slave_SQL_Running線程將主庫的DDL和DML操作在slave實行。DML和DDL的IO操作是隨即的,不是次序的,本錢高許多,還能夠可slave上的其他查詢發生lock爭用,因為Slave_SQL_Running也是單線程的,所以一個DDL卡主了,須要履行10分鐘,那末一切以後的DDL會期待這個DDL履行完才會持續履行,這就招致了延時。有同伙會問:“主庫上誰人雷同的DDL也須要履行10分,為何slave會延時?”,謎底是master可以並發,Slave_SQL_Running線程卻弗成以。

2. MySQL數據庫主從同步延遲是怎樣發生的。
當主庫的TPS並發較高時,發生的DDL數目跨越slave一個sql線程所能蒙受的規模,那末延時就發生了,固然還有就是能夠與slave的年夜型query語句發生了鎖期待。

3. MySQL數據庫主從同步延遲處理計劃。
丁奇的transefer是一個不錯的計劃,不外普通公司受限於對mysql的代碼修正才能的限制和對mysql的掌控才能,照樣不太合適。
最簡略的削減slave同步延時的計劃就是在架構上做優化,盡可能讓主庫的DDL疾速履行。還有就是主庫是寫,對數據平安性較高,好比sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不須要這麼高的數據平安,完整可以講sync_binlog設置為0或許封閉binlog,innodb_flushlog也能夠設置為0來進步sql的履行效力。別的就是應用比主庫更好的硬件裝備作為slave。
mysql-5.6.3曾經支撐了多線程的主從復制。道理和丁奇的相似,丁奇的是以表做多線程,oracle應用的是以數據庫(schema)為單元做多線程,分歧的庫可使用分歧的復制線程。

sync_binlog=1 o
     This makes MySQL synchronize the binary log's contents to disk each time it commits a transaction
     默許情形下,其實不是每次寫入時都將binlog與硬盤同步。是以假如操作體系或機械(不只僅是MySQL辦事器)瓦解,有能夠binlog中最初的語句丟 掉了。要想避免這類情形,你可使用sync_binlog全局變量(1是最平安的值,但也是最慢的),使binlog在每N次binlog寫入後與硬盤 同步。即便sync_binlog設置為1,湧現瓦解時,也有能夠表內容和binlog內容之間存在紛歧致性。假如應用InnoDB表,MySQL辦事器 處置COMMIT語句,它將全部事務寫入binlog並將事務提交到InnoDB中。假如在兩次操作之間湧現瓦解,重啟時,事務被InnoDB回滾,但仍 然存在binlog中。可以用--innodb-safe-binlog選項來增長InnoDB表內容和binlog之間的分歧性。(正文:在MySQL 5.1中不須要--innodb-safe-binlog;因為引入了XA事務支撐,該選項作廢了),該選項可以供給更年夜水平的平安,使每一個事務的 binlog(sync_binlog =1)和(默許情形為真)InnoDB日記與硬盤同步,該選項的後果是瓦解後重啟時,在滾回事務後,MySQL辦事器從binlog剪切回滾的 InnoDB事務。如許可以確保binlog反應InnoDB表切實其實切數據等,並使從辦事器堅持與主辦事器堅持同步(不吸收 回滾的語句)。

innodb_flush_log_at_trx_commit (這個很管用)
埋怨Innodb比MyISAM慢 100倍?那末你年夜概是忘了調劑這個值。默許值1的意思是每次事務提交或事務外的指令都須要把日記寫入(flush)硬盤,這是很費時的。特殊是應用電 池供電緩存(Battery backed up cache)時。設成2關於許多應用,特殊是從MyISAM表轉過去的是可以的,它的意思是不寫入硬盤而是寫入體系緩存。日記依然會每秒flush到硬 盤,所以你普通不會喪失跨越1-2秒的更新。設成0會更快一點,但平安方面比擬差,即便MySQL掛了也能夠會喪失事務的數據。而值2只會在全部操作體系 掛了時才能夠丟數據。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved