成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL主從復制太慢,怎么辦?

數據庫 MySQL
總結一下,MySQL 并行復制策略主要是有三種思想:按照庫的級別粒度并行執行,用于決定分發策略的 hash 表里,key 就是數據庫名。按照行級別,根據id、唯一索引、value、庫名這些來計算hash值,做分組標示根據redo log 持久化原理,同一個commit組 或者 同時進入prepare或者commit表示可以同步執行。

mysql主從同步延遲原因

導致備庫延遲的原因主要有如下幾種:

  • 通常備庫所在機器的性能要比主庫所在的機器性能差,執行備份自然會更慢。
  • 備庫的讀壓力大。在備庫過多的執行繁重的查詢任務。
  • 大事務。因為主庫上必須等事務執行完成才會寫入 binlog,再傳給備庫。一次性地用 delete 語句刪除太多數據、表 DDL都可能造成延遲。
  • 主庫是多線程操作,而從庫卻只有一個線程在執行復制。

主從同步延遲解決方案

解決方案:

  • 提升從庫物理機的配置,性能差異不要太大。
  • 業務的持久化層的實現采用分庫架構,mysql服務可平行擴展,分散壓力。
  • 采用讀寫分離,分散主庫壓力。
  • 加入緩存如Redis等,降低mysql的讀壓力。
  • 避免執行大事務等費時的操作,可以將事務內容拆開執行。
  • 使用同步并行復制方案MTS

并行復制

從MySQL5.6開始支持并行復制,這就解決了之前復制速度緩慢的問題。coordinator 就是原來的 sql_thread, 他負責讀取中轉日志和分發事務。真正更新日志的,變成了 worker 線程。work 線程的個數由參數 slave_parallel_workers 決定的。既然是并行就一定會有數據一致性的問題,兩個不同的事務如果在不同的work中同時執行,順序的影響也會造成結果不同。

圖片

所以在 coordinator 分發任務的時候,要滿足以下這兩個基本要求:

  • 不能造成更新覆蓋。這就要求更新同一行的兩個事務,必須被分發到同一個 worker 中。
  • 同一個事務不能被拆開,必須放到同一個 worker 中。

各個版本的多線程復制,都遵循了這兩條基本原則。

MySQL 5.6版本策略

官方 MySQL5.6 版本,支持了并行復制,只是支持的粒度是按庫并行。用于決定分發策略的 hash 表里,key 就是數據庫名,同一個數據庫需要在同一個worker中串行執行,這就避免了事務之間相互影響的問題。

MariaDB 策略

MariaDB 的并行復制策略利用redo log 組提交 (group commit) 優化的特性:能夠在同一組里提交的事務,一定不會修改同一行。所以可以按照食物的 commit—_id來分組。

在實現上,MariaDB 是這么做的:

  • 在一組里面一起提交的事務,有一個相同的 commit_id,下一組就是 commit_id+1;
  • commit_id 直接寫到 binlog 里面;傳到備庫應用的時候,相同 commit_id 的事務分發到多個 worker 執行;
  • 這一組全部執行完成后,coordinator 再去取下一批。

MySQL 5.7策略

MySQL5.7中對 MariaDB 多策略進行了優化。因為同時處于 prepare 狀態的事務,在備庫執行時是可以并行的,此時的redolog已經經過了并行驗證,所以從庫也可以執行。具體步驟不做贅述,參考MariaDB策略。

MySQL 5.7.22 的并行復制策略

在 2018 年 4 月份發布的 MySQL 5.7.22 版本里(最新5.7.37),MySQL 增加了一個新的并行復制策略,基于 WRITESET 的并行復制。相應地,新增了一個參數 binlog-transaction-dependency-tracking,用來控制是否啟用這個新策略。這個參數的可選值有以下三種。

COMMIT_ORDER,表示的就是前面介紹的,根據同時進入 prepare 和 commit 來判斷是否可以并行的策略。

  • WRITESET,表示的是對于事務涉及更新的每一行,計算出這一行的 hash 值,組成集合 writeset。如果兩個事務沒有操作相同的行,也就是說它們的 writeset 沒有交集,就可以并行。
  • WRITESET_SESSION,是在 WRITESET 的基礎上多了一個約束,即在主庫上同一個線程先后執行的兩個事務,在備庫執行的時候,要保證相同的先后順序。
  • 當然為了唯一標識,這個 hash 值是通過“庫名 + 表名 + 索引名 + 值”計算出來的。如果一個表上除了有主鍵索引外,還有其他唯一索引,那么對于每個唯一索引,insert 語句對應的 writeset 就要多增加一個 hash 值。

總結

總結一下,MySQL 并行復制策略主要是有三種思想:

按照庫的級別粒度并行執行,用于決定分發策略的 hash 表里,key 就是數據庫名。

按照行級別,根據id、唯一索引、value、庫名這些來計算hash值,做分組標示

根據redo log 持久化原理,同一個commit組 或者 同時進入prepare或者commit表示可以同步執行。

責任編輯:武曉燕 來源: 后端開發技術
相關推薦

2022-03-16 15:54:52

MySQL數據format

2024-03-01 18:33:59

MySQL節點數據

2021-06-08 07:48:27

MySQL主從配置

2025-02-10 10:55:16

2024-07-04 08:00:24

2023-03-19 22:38:12

邏輯復制PostgreSQL

2023-03-19 11:53:27

2025-01-15 15:47:36

2023-07-03 08:57:45

Master服務TCP

2023-09-24 14:32:15

2022-09-07 09:00:00

計算數據庫

2017-10-11 15:40:20

MySQL主從復制拓撲結構

2017-09-05 16:00:49

MySQL主從復制備份

2015-03-02 14:39:07

MySQLMySQL復制

2023-02-27 07:33:14

MySQL數據庫服務器

2021-03-19 11:33:42

MySQL數據庫備份

2023-09-02 20:13:01

代碼網速

2021-01-12 09:03:17

MySQL復制半同步

2024-07-04 17:22:23

2017-06-23 22:00:13

MySqlsslcentos
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线观看一区二区三区 | 国产91网址 | 亚洲三级在线观看 | 成年网站在线观看 | 成年人在线观看视频 | 日韩中文字幕一区 | 久久久久久国产精品免费免费狐狸 | 国产黄色一级电影 | 蜜桃av一区二区三区 | 精久久久 | 国产91久久久久蜜臀青青天草二 | 成人在线免费视频 | 欧美日韩激情 | 日韩精品一区二区不卡 | 激情亚洲 | 综合国产第二页 | 精品免费视频 | 国产精品久久久久久模特 | 凹凸日日摸日日碰夜夜 | 日本久久综合 | 亚洲欧美在线免费观看 | 91传媒在线观看 | 国产激情91久久精品导航 | 日韩a在线| 99久久99久久精品国产片果冰 | 欧美一区二区在线视频 | 国产精品久久久久久久久久久久冷 | 日韩一级免费看 | 久久久精 | 日本超碰| av久久| 国产成人综合在线 | 欧美一级免费看 | 欧产日产国产精品视频 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 国产在线观看一区二区 | 成人精品毛片国产亚洲av十九禁 | jvid精品资源在线观看 | 午夜精品一区二区三区在线 | 激情在线视频网站 | 久草网站 |