亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入淺出講解MySQL的并行復(fù)制

 更新時(shí)間:2018年08月02日 09:45:58   作者:蘭春  
這篇文章主要給大家介紹了關(guān)于MySQL并行復(fù)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、并行復(fù)制的背景

首先,為什么會(huì)有并行復(fù)制這個(gè)概念呢?

1. DBA都應(yīng)該知道,MySQL的復(fù)制是基于binlog的。 

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

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

4. SQL線程主要負(fù)責(zé)解析relay log,并應(yīng)用到slave中 

5. 不管怎么說(shuō),IO和SQL線程都是單線程的,然后master卻是多線程的,所以難免會(huì)有延遲,為了解決這個(gè)問(wèn)題,多線程應(yīng)運(yùn)而生了。 

6. IO多線程?  

 6.1 IO沒(méi)必要多線程,因?yàn)镮O線程并不是瓶頸啊 

7. SQL多線程?

 7.1 沒(méi)錯(cuò),目前最新的5.6,5.7,8.0 都是在SQL線程上實(shí)現(xiàn)了多線程,來(lái)提升slave的并發(fā)度  

接下來(lái),我們就來(lái)一窺MySQL在并行復(fù)制上的努力和成果吧

二、重點(diǎn)

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

三、MySQL5.6 基于schema的并行復(fù)制

slave-parallel-type=DATABASE(不同庫(kù)的事務(wù),沒(méi)有鎖沖突)

之前說(shuō)過(guò),并行復(fù)制的目的就是要讓slave盡可能的多線程跑起來(lái),當(dāng)然基于庫(kù)級(jí)別的多線程也是一種方式(不同庫(kù)的事務(wù),沒(méi)有鎖沖突)

先說(shuō)說(shuō)優(yōu)點(diǎn): 實(shí)現(xiàn)相對(duì)來(lái)說(shuō)簡(jiǎn)單,對(duì)用戶來(lái)說(shuō)使用起來(lái)也簡(jiǎn)單
再說(shuō)說(shuō)缺點(diǎn): 由于是基于庫(kù)的,那么并行的粒度非常粗,現(xiàn)在很多公司的架構(gòu)是一庫(kù)一實(shí)例,針對(duì)這樣的架構(gòu),5.6的并行復(fù)制無(wú)能為力。當(dāng)然還有就是主從事務(wù)的先后順序,對(duì)于5.6也是個(gè)大問(wèn)題

話不多說(shuō),來(lái)張圖好了

四、MySQL5.7 基于group commit的并行復(fù)制

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

group commit,之前的文章有詳細(xì)描述,這里不多解釋。MySQL5.7在組提交的時(shí)候,還為每一組的事務(wù)打上了標(biāo)記,現(xiàn)在想想就是為了方便進(jìn)行MTS吧。

我們先看一組binlog

last_committed=0 sequence_number=1
last_committed=1 sequence_number=2
last_committed=2 sequence_number=3
last_committed=3 sequence_number=4
last_committed=4 sequence_number=5
last_committed=4 sequence_number=6
last_committed=4 sequence_number=7
last_committed=6 sequence_number=8
last_committed=6 sequence_number=9
last_committed=9 sequence_number=10

4.1 Commit-Parent-Based模式

4.2 Lock-Based模式


五、MySQL8.0 基于write-set的并行復(fù)制

基于主鍵的沖突檢測(cè)(binlog_transaction_depandency_tracking = COMMIT_ORDERE|WRITESET|WRITESET_SESSION, 修改的row的主鍵或非空唯一鍵沒(méi)有沖突,即可并行)
5.7.22 也支持了 write-set 機(jī)制

事務(wù)依賴關(guān)系:binlog_transaction_depandency_tracking = COMMIT_ORDERE|WRITESET|WRITESET_SESSION

COMMIT_ORDERE: 繼續(xù)基于組提交方式
WRITESET: 基于寫集合決定事務(wù)依賴
WRITESET_SESSION: 基于寫集合,但是同一個(gè)session中的事務(wù)不會(huì)有相同的last_committed

事務(wù)檢測(cè)算法:transaction_write_set_extraction = OFF| XXHASH64 | MURMUR32

MySQL會(huì)有一個(gè)變量來(lái)存儲(chǔ)已經(jīng)提交的事務(wù)HASH值,所有已經(jīng)提交的事務(wù)所修改的主鍵(或唯一鍵)的值經(jīng)過(guò)hash后都會(huì)與那個(gè)變量的集合進(jìn)行對(duì)比,來(lái)判斷改行是否與其沖突,并以此來(lái)確定依賴關(guān)系

這里說(shuō)的變量,可以通過(guò)這個(gè)設(shè)置大?。?binlog_transaction_dependency_history_size

這樣的粒度,就到了 row級(jí)別了,此時(shí)并行的粒度更加精細(xì),并行的速度會(huì)更快,某些情況下,說(shuō)slave的并行度超越master也不為過(guò)(master是單線程的寫,slave也可以并行回放)

六、如何讓slave的并行復(fù)制和master的事務(wù)執(zhí)行的順序一致呢

5.7.19 之后,可以通過(guò)設(shè)置 slave_preserve_commit_order = 1

官方解釋: 

For multithreaded slaves, enabling this variable ensures that transactions are externalized on the slave in the same order as they appear in the slave's relay log.  
Setting this variable has no effect on slaves for which multithreading is not enabled.  
All replication threads (for all replication channels if you are using multiple replication channels) must be stopped before changing this variable.  
--log-bin and --log-slave-updates must be enabled on the slave.  
In addition --slave-parallel-type must be set to LOGICAL_CLOCK. 
Once a multithreaded slave has been started, transactions can begin to execute in parallel.  
With slave_preserve_commit_order enabled, the executing thread waits until all previous transactions are committed before committing.  
While the slave thread is waiting for other workers to commit their transactions it reports its status as Waiting for preceding transaction to commit.

大致實(shí)現(xiàn)原理就是:excecution階段可以并行執(zhí)行,binlog flush的時(shí)候,按順序進(jìn)行。 引擎層提交的時(shí)候,根據(jù)binlog_order_commit也是排隊(duì)順序完成 

換句話說(shuō),如果設(shè)置了這個(gè)參數(shù),master是怎么并行的,slave就怎么辦并行

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份

    Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份

    這篇文章主要介紹了Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • PHP學(xué)習(xí)之SQL語(yǔ)句快速入門

    PHP學(xué)習(xí)之SQL語(yǔ)句快速入門

    在學(xué)校php過(guò)程中,需要用得到的一些語(yǔ)句。比較簡(jiǎn)單的大家一定要掌握啊。
    2010-03-03
  • SQLyog的下載、安裝、破解、配置教程(MySQL可視化工具安裝)

    SQLyog的下載、安裝、破解、配置教程(MySQL可視化工具安裝)

    SQLyog是一款MySQL可視化工具,他可以將部分SQL操作通過(guò)圖形化界面操作來(lái)完成,方便開(kāi)發(fā)者更好的進(jìn)行開(kāi)發(fā)及數(shù)據(jù)庫(kù)設(shè)計(jì),這篇文章主要介紹了SQLyog的下載、安裝、破解、配置(MySQL可視化工具安裝),需要的朋友可以參考下
    2022-09-09
  • 當(dāng)面試官問(wèn)mysql中char與varchar的區(qū)別

    當(dāng)面試官問(wèn)mysql中char與varchar的區(qū)別

    這篇文章主要以聊天形式圖片的添加,將面試官面試真實(shí)場(chǎng)景體現(xiàn)出來(lái),好奇的朋友不要錯(cuò)過(guò)奧
    2021-08-08
  • Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    在MySQL中,可以使用LIKE運(yùn)算符進(jìn)行模糊查詢,LIKE運(yùn)算符用于匹配字符串模式,其中可以使用通配符來(lái)表示任意字符或字符序列,這篇文章主要介紹了Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解,需要的朋友可以參考下
    2023-11-11
  • MySQL如何使用使用Xtrabackup進(jìn)行備份和恢復(fù)

    MySQL如何使用使用Xtrabackup進(jìn)行備份和恢復(fù)

    Xtrabackup是由Percona開(kāi)發(fā)的一個(gè)開(kāi)源軟件,可實(shí)現(xiàn)對(duì)InnoDB的數(shù)據(jù)備份,支持在線熱備份(備份時(shí)不影響數(shù)據(jù)讀寫)。本文講解如何使用該工具進(jìn)行備份和恢復(fù)
    2021-06-06
  • mysql如何統(tǒng)計(jì)同一字段不同值的個(gè)數(shù)

    mysql如何統(tǒng)計(jì)同一字段不同值的個(gè)數(shù)

    這篇文章主要介紹了mysql如何統(tǒng)計(jì)同一字段不同值的個(gè)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MySQL全文索引在數(shù)據(jù)庫(kù)中的應(yīng)用和優(yōu)勢(shì)(模糊查詢不用like+%)

    MySQL全文索引在數(shù)據(jù)庫(kù)中的應(yīng)用和優(yōu)勢(shì)(模糊查詢不用like+%)

    全文索引技術(shù)可以有效地從大量文本中檢索信息,適用于搜索引擎和電商平臺(tái)等場(chǎng)景,InnoDB從MySQL5.6開(kāi)始支持全文索引,使用倒排索引實(shí)現(xiàn),全文檢索分為自然語(yǔ)言搜索、布爾搜索和查詢擴(kuò)展搜索三種模式,全文索引提高了模糊查詢的效率,優(yōu)化了基于文本的搜索查詢
    2024-09-09
  • mysql重復(fù)索引與冗余索引實(shí)例分析

    mysql重復(fù)索引與冗余索引實(shí)例分析

    這篇文章主要介紹了mysql重復(fù)索引與冗余索引,簡(jiǎn)單說(shuō)明了重復(fù)索引與冗余索引的概念、應(yīng)用場(chǎng)景并結(jié)合實(shí)例形式分析了mysql重復(fù)索引與冗余索引相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • JMeter壓測(cè)Mysql教程分享

    JMeter壓測(cè)Mysql教程分享

    文章介紹了如何使用JMeter進(jìn)行數(shù)據(jù)庫(kù)壓力測(cè)試的步驟,包括安裝JMeter、下載并配置MySQL JDBC驅(qū)動(dòng)、設(shè)置測(cè)試計(jì)劃、添加JDBC連接配置元件、添加JDBC請(qǐng)求取樣器以及可選的監(jiān)聽(tīng)器配置,最后,文章指導(dǎo)如何運(yùn)行測(cè)試并分析結(jié)果,以評(píng)估數(shù)據(jù)庫(kù)在不同壓力下的性能表現(xiàn)
    2024-11-11

最新評(píng)論