电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL并行復制的深入淺出

瀏覽:3日期:2023-10-16 12:55:14
一、并行復制的背景 首先,為什么會有并行復制這個概念呢?

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也是個大問題

話不多說,來張圖好了

MySQL并行復制的深入淺出

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

MySQL并行復制的深入淺出

4.2 Lock-Based模式

MySQL并行復制的深入淺出

五、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: 繼續基于組提交方式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的事務執行的順序一致呢

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.大致實現原理就是:excecution階段可以并行執行,binlog flush的時候,按順序進行。 引擎層提交的時候,根據binlog_order_commit也是排隊順序完成 換句話說,如果設置了這個參數,master是怎么并行的,slave就怎么辦并行

來自:http://keithlan.github.io/2018/07/31/mysql_mts_detail/

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | ZHZ8耐压测试仪-上海胜绪电气有限公司 | 北京乾茂兴业科技发展有限公司 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 污水处理设备-海普欧环保集团有限公司| 广西资质代办_建筑资质代办_南宁资质代办理_新办、增项、升级-正明集团 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 餐饮加盟网_特色餐饮加盟店_餐饮连锁店加盟 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 高温高压釜(氢化反应釜)百科 | 中山市派格家具有限公司【官网】 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 南京欧陆电气股份有限公司-风力发电机官网| 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 水平筛厂家-三轴椭圆水平振动筛-泥沙震动筛设备_山东奥凯诺矿机 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 |