日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql确认半同步命令_怎么判断mysql是否是半同步复制

發布時間:2025/3/11 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql确认半同步命令_怎么判断mysql是否是半同步复制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AFTER_COMMIT(5.6默認值)

master將每個事務寫入binlog ,傳遞到slave 刷新到磁盤(relay log),同時主庫提交事務。master等待slave 反饋收到relay log,只有收到ACK后master才將commit OK結果反饋給客戶端。

AFTER_SYNC(5.7默認值,但5.6中無此模式)

master 將每個事務寫入binlog , 傳遞到slave 刷新到磁盤(relay log)。master等待slave 反饋接收到relay log的ack之后,再提交事務并且返回commit OK結果給客戶端。?即使主庫crash,所有在主庫上已經提交的事務都能保證已經同步到slave的relay log中。

因此5.7引入了after_sync模式,帶來的主要收益是解決after_commit導致的master crash主從間數據不一致問題,因此在引入after_sync模式后,所有提交的數據已經都被復制,故障切換時數據一致性將得到提升。

2 性能提升支持發送binlog和接受ack的異步化

舊版本的semi sync 受限于dump thread ,原因是dump thread 承擔了兩份不同且又十分頻繁的任務:傳送binlog 給slave ,還需要等待slave反饋信息,而且這兩個任務是串行的,dump thread 必須等待 slave 返回之后才會傳送下一個 events 事務。dump thread 已然成為整個半同步提高性能的瓶頸。在高并發業務場景下,這樣的機制會影響數據庫整體的TPS .

圖:Without ACK receiving thread

為了解決上述問題,在5.7版本的semi sync 框架中,獨立出一個 ack collector thread ,專門用于接收slave 的反饋信息。這樣master 上有兩個線程獨立工作,可以同時發送binlog 到slave ,和接收slave的反饋。

圖:With ACK receiving thread3 性能提升控制主庫接收slave 寫事務成功反饋數量

MySQL 5.7新增了rpl_semi_sync_master_wait_slave_count參數,可以用來控制主庫接受多少個slave寫事務成功反饋,給高可用架構切換提供了靈活性。

如圖所示,當count值為2時,master需等待兩個slave的ack

4 性能提升

Binlog 互斥鎖改進

舊版本半同步復制在主提交binlog的寫會話和dump thread讀binlog的操作都會對binlog添加互斥鎖,導致binlog文件的讀寫是串行化的,存在并發度的問題。

MySQL 5.7對binlog lock進行了以下兩方面優化

1.移除了dump thread對binlog的互斥鎖

2.加入了安全邊際保證binlog的讀安全

5 性能提升組提交

5.7引入了新的變量slave-parallel-type,其可以配置的值有:

DATABASE (5.7之前默認值),基于庫的并行復制方式;LOGICAL_CLOCK (5.7新增值),基于組提交的并行復制方式;

MySQL 5.6版本也支持所謂的并行復制,但是其并行只是基于DATABASE的,也就是基于庫的。如果用戶的MySQL數據庫實例中存在多個DATABASE ,對于從機復制的速度的確可以有比較大的幫助,如果用戶實例僅有一個庫,那么就無法實現并行回放,甚至性能會比原來的單線程更差。

MySQL5.7中增加了一種新的并行模式:為同時進入COMMIT階段的事務分配相同的序列號,這些擁有相同序列號的事務在備庫是可以并發執行的。

MySQL 5.7真正實現的并行復制,這其中最為主要的原因就是slave服務器的回放與主機是一致的即master服務器上是怎么并行執行的slave上就怎樣進行并行回放。不再有庫的并行復制限制,對于二進制日志格式也無特殊的要求(基于庫的并行復制也沒有要求)。

因此下面的序列中可以并發的序列為(其中前面一個數字為last_committed ,后面一個數字為sequence_number ):

trx1 1…..2trx2 1………….3trx3 1…………………….4trx4 ? ? ? ?2……………………….5trx5 ? ? ? ? ? ? ? 3…………………………..6trx6 ? ? ? ? ? ? ? ? ? ? 3………………………………7trx7 ? ? ? ? ? ? ? ? ? ? ? ? ? ?6………………………………..8

備庫并行規則:當分發一個事務時,其last_committed 序列號比當前正在執行的事務的最小sequence_number要小時,則允許執行。

因此,

a)trx1執行,last_commit<2的可并發,trx2, trx3可繼續分發執行

b)trx1執行完成后,last_commit < 3的可以執行, trx4可分發

c)trx2執行完成后,last_commit?< 4的可以執行, trx5, trx6可分發

d)trx3、trx4、trx5完成后,last_commit < 7的可以執行,trx7可分發

綜上所述

我們認為MySQL 5.7版對Loss-Less半同步復制技術的優化,使得其成熟度和執行效率都得到了質的提高。我們建議在使用MySQL 5.7作為生產環境的部署時,可以使用半同步技術作為高可用與讀寫分離方案的數據復制方案。

請點擊輸入圖片描述

總結

以上是生活随笔為你收集整理的mysql确认半同步命令_怎么判断mysql是否是半同步复制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。