MySQL慢查詢,mysql5.7延遲_[MySQL] 號稱永久解決了復制延遲問題的并行復制,MySQL5.7-阿里云開發者社區...

 2023-11-10 阅读 28 评论 0

摘要:原文:[MySQL] 號稱永久解決了復制延遲問題的并行復制,MySQL5.7一、緣由:某天看到主從復制延時的告警有點頻繁,就想著是不是徹底可以解決一下。一般主從復制,有三個線程參與,都是單線程:Binlog Dump(主) ----->IO Thread (從) --

原文:[MySQL] 號稱永久解決了復制延遲問題的并行復制,MySQL5.7

一、緣由:

某天看到主從復制延時的告警有點頻繁,就想著是不是徹底可以解決一下。

一般主從復制,有三個線程參與,都是單線程:Binlog Dump(主) ----->IO Thread (從) -----> SQL Thread(從)。復制出現延遲一般出在兩個地方

1)SQL線程忙不過來(可能需要應用數據量較大,可能和從庫本身的一些操作有鎖和資源的沖突;主庫可以并發寫,SQL線程不可以;主要原因)

2)網絡抖動導致IO線程復制延遲(次要原因)。

二、解決辦法:

MySQL從5.6開始有了SQL Thread多個的概念,可以并發還原數據,即并行復制技術。

MySQL 5.6中,設置參數slave_parallel_workers = 4(>1),即可有4個SQL Thread(coordinator線程)來進行并行復制,其狀態為:Waiting for an evant from Coordinator。

但是其并行只是基于Schema的,也就是基于庫的。如果數據庫實例中存在多個Schema,這樣設置對于Slave復制的速度可以有比較大的提升。通常情況下單庫多表是更常見的一種情形,

那基于庫的并發就沒有卵用。其核心思想是:不同schema下的表并發提交時的數據不會相互影響,即slave節點可以用對relay log中不同的schema各分配一個類似SQL功能的線程,

來重放relay log中主庫已經提交的事務,保持數據與主庫一致。

在MySQL 5.7中,引入了基于組提交的并行復制(Enhanced Multi-threaded Slaves),設置參數slave_parallel_workers>0并且global.slave_parallel_type=‘LOGICAL_CLOCK’,

即可支持一個schema下,slave_parallel_workers個的worker線程并發執行relay log中主庫提交的事務。其核心思想:一個組提交的事務都是可以并行回放(配合binary log group commit);

slave機器的relay log中last_committed相同的事務(sequence_num不同)可以并發執行。

其中,變量slave-parallel-type可以有兩個值:DATABASE 默認值,基于庫的并行復制方式;LOGICAL_CLOCK:基于組提交的并行復制方式

MySQL 5.7開啟Enhanced Multi-Threaded Slave配置:

# slave

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=16master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

至此,MySQL徹底解決了復制延遲問題,可喜可賀!

三、參考文檔

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/169864.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息