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

首頁 > 數據庫 > MySQL > 正文

深入淺出講解MySQL的并行復制

2024-07-24 12:50:01
字體:
來源:轉載
供稿:網友

一、并行復制的背景

首先,為什么會有并行復制這個概念呢?

1. DBA都應該知道,MySQL的復制是基于binlog的。 

2. MySQL復制包括兩部分,IO線程 和 SQL線程。 

3. IO線程主要是用于拉取接收Master傳遞過來的binlog,并將其寫入到relay log 

4. SQL線程主要負責解析relay log,并應用到slave中 

5. 不管怎么說,IO和SQL線程都是單線程的,然后master卻是多線程的,所以難免會有延遲,為了解決這個問題,多線程應運而生了。 

6. IO多線程?  

 6.1 IO沒必要多線程,因為IO線程并不是瓶頸啊 

7. SQL多線程?

 7.1 沒錯,目前最新的5.6,5.7,8.0 都是在SQL線程上實現了多線程,來提升slave的并發度  

接下來,我們就來一窺MySQL在并行復制上的努力和成果吧

二、重點

是否能夠并行,關鍵在于多事務之間是否有鎖沖突,這是關鍵。 下面的并行復制原理就是在看如何讓避免鎖沖突

三、MySQL5.6 基于schema的并行復制

slave-parallel-type=DATABASE(不同庫的事務,沒有鎖沖突)

之前說過,并行復制的目的就是要讓slave盡可能的多線程跑起來,當然基于庫級別的多線程也是一種方式(不同庫的事務,沒有鎖沖突)

先說說優點: 實現相對來說簡單,對用戶來說使用起來也簡單
再說說缺點: 由于是基于庫的,那么并行的粒度非常粗,現在很多公司的架構是一庫一實例,針對這樣的架構,5.6的并行復制無能為力。當然還有就是主從事務的先后順序,對于5.6也是個大問題

話不多說,來張圖好了

四、MySQL5.7 基于group commit的并行復制

slave-parallel-type=LOGICAL_CLOCK : Commit-Parent-Based模式(同一組的事務[last-commit相同],沒有鎖沖突. 同一組,肯定沒有沖突,否則沒辦法成為同一組)
slave-parallel-type=LOGICAL_CLOCK : Lock-Based模式(即便不是同一組的事務,只要事務之間沒有鎖沖突[prepare階段],就可以并發。 不在同一組,只要N個事務prepare階段可以重疊,說明沒有鎖沖突)

group commit,之前的文章有詳細描述,這里不多解釋。MySQL5.7在組提交的時候,還為每一組的事務打上了標記,現在想想就是為了方便進行MTS吧。

我們先看一組binlog

last_committed=0 sequence_number=1last_committed=1 sequence_number=2last_committed=2 sequence_number=3last_committed=3 sequence_number=4last_committed=4 sequence_number=5last_committed=4 sequence_number=6last_committed=4 sequence_number=7last_committed=6 sequence_number=8last_committed=6 sequence_number=9last_committed=9 sequence_number=10
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白山市| 乐安县| 东辽县| 曲周县| 湘乡市| 万山特区| 波密县| 团风县| 五家渠市| 军事| 四平市| 曲阳县| 临武县| 两当县| 威海市| 东方市| 开鲁县| 昔阳县| 稷山县| 英山县| 临武县| 淮安市| 贺州市| 土默特右旗| 正安县| 建宁县| 贵溪市| 海兴县| 施秉县| 南涧| 邯郸市| 万荣县| 宝丰县| 利川市| 黔西| 汕尾市| 陆丰市| 长沙县| 高雄市| 涪陵区| 朝阳县|