欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、并行復制的背景

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

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線程上實現(xiàn)了多線程,來提升slave的并發(fā)度  

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

二、重點

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

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

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

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

先說說優(yōu)點: 實現(xiàn)相對來說簡單,對用戶來說使用起來也簡單
再說說缺點: 由于是基于庫的,那么并行的粒度非常粗,現(xiàn)在很多公司的架構是一庫一實例,針對這樣的架構,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階段],就可以并發(fā)。 不在同一組,只要N個事務prepare階段可以重疊,說明沒有鎖沖突)

group commit,之前的文章有詳細描述,這里不多解釋。MySQL5.7在組提交的時候,還為每一組的事務打上了標記,現(xià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的并行復制

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

事務依賴關系:binlog_transaction_depandency_tracking = COMMIT_ORDERE|WRITESET|WRITESET_SESSION

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

事務檢測算法:transaction_write_set_extraction = OFF| XXHASH64 | MURMUR32

MySQL會有一個變量來存儲已經提交的事務HASH值,所有已經提交的事務所修改的主鍵(或唯一鍵)的值經過hash后都會與那個變量的集合進行對比,來判斷改行是否與其沖突,并以此來確定依賴關系

這里說的變量,可以通過這個設置大小: binlog_transaction_dependency_history_size

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

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

5.7.19 之后,可以通過設置 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.

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

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

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

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

    PHP學習之SQL語句快速入門

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

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

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

    當面試官問mysql中char與varchar的區(qū)別

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

    Mysql 模糊查詢和正則表達式實例詳解

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

    MySQL如何使用使用Xtrabackup進行備份和恢復

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

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

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

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

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

    mysql重復索引與冗余索引實例分析

    這篇文章主要介紹了mysql重復索引與冗余索引,簡單說明了重復索引與冗余索引的概念、應用場景并結合實例形式分析了mysql重復索引與冗余索引相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • JMeter壓測Mysql教程分享

    JMeter壓測Mysql教程分享

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

最新評論