国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:4日期:2023-10-16 12:55:14
一、并行復(fù)制的背景 首先,為什么會(huì)有并行復(fù)制這個(gè)概念呢?

1.DBA都應(yīng)該知道,MySQL的復(fù)制是基于binlog的。 2.MySQL復(fù)制包括兩部分,IO線程 和 SQL線程。 3.IO線程主要是用于拉取接收Master傳遞過(guò)來(lái)的binlog,并將其寫(xiě)入到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ì)用戶(hù)來(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)題

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

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

四、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=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 4.1 Commit-Parent-Based模式

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

4.2 Lock-Based模式

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

五、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ù)依賴(lài)關(guān)系:binlog_transaction_depandency_tracking = COMMIT_ORDERE|WRITESET|WRITESET_SESSION

COMMIT_ORDERE: 繼續(xù)基于組提交方式WRITESET: 基于寫(xiě)集合決定事務(wù)依賴(lài)WRITESET_SESSION: 基于寫(xiě)集合,但是同一個(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)確定依賴(lài)關(guān)系

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

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

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

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

官方解釋?zhuān)? 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ì)順序完成 換句話(huà)說(shuō),如果設(shè)置了這個(gè)參數(shù),master是怎么并行的,slave就怎么辦并行

來(lái)自:http://keithlan.github.io/2018/07/31/mysql_mts_detail/

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 成人黄色一级视频 | 99久久精品免费看国产免费软件 | 久久精品视频在线 | 亚洲精品美女视频 | 九九九九九九精品免费 | 久草国产在线视频 | 久久精品99 | 中日韩欧美一级毛片 | 欧美日韩视频免费播放 | 超清波多野结衣精品一区 | 多人伦精品一区二区三区视频 | 欧美精品网站 | 欧美日韩在线观看一区二区 | 性8sex亚洲区入口 | 韩国欧洲一级毛片 | 欧美成人观看免费版 | 欧洲免费无线码二区5 | 国产成人18 | 精品久久久久久 | 日本作爱 | 爱爱爱久久久久久久 | 日本特黄乱人伦片 | 欧美成人在线网站 | 久久久久国产精品美女毛片 | 国产特黄特色的大片观看免费视频 | 欧美日韩在线播放一区二区三区 | 欧美日韩国产va另类 | 91精品视频免费 | 欧美人成在线观看ccc36 | 国产精品性视频免费播放 | 一级a毛片免费观看久久精品 | 九九在线精品视频播放 | 伊人短视频 | 一级特级毛片 | 亚洲三级一区 | 亚洲欧美精品一区二区 | 亚洲成人免费网址 | 亚洲精品一区二区在线播放 | 国产精品久久国产三级国电话系列 | 亚洲视频欧美 | 亚洲不卡视频在线观看 |