最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL主從復(fù)制延遲原因以及解決方案

 更新時(shí)間:2020年09月23日 08:42:31   作者:老葉茶館  
這篇文章主要介紹了MySQL主從復(fù)制延遲原因以及解決方案,幫助大家更好的理解和使用數(shù)據(jù)庫(kù),感興趣的朋友可以了解下

來(lái)源:公眾號(hào)「神諭的暗影長(zhǎng)廊」

在異步或半同步的復(fù)制結(jié)構(gòu)中,從庫(kù)出現(xiàn)延遲是一件十分正常的事。
雖出現(xiàn)延遲正常,但是否需要關(guān)注,則一般是由業(yè)務(wù)來(lái)評(píng)估。
如:從庫(kù)上有需要較高一致性的讀業(yè)務(wù),并且要求延遲小于某個(gè)值,那么則需要關(guān)注。

簡(jiǎn)單概述一下復(fù)制邏輯:

1、主庫(kù)將對(duì)數(shù)據(jù)庫(kù)實(shí)例的變更記錄到binlog中。
2、主庫(kù)會(huì)有binlog dump線程實(shí)時(shí)監(jiān)測(cè)binlog的變更并將這些新的events推給從庫(kù)(Master has sent all binlog to slave; waiting for more updates
3、從庫(kù)的IO Thread接收這些events,并將其記錄入relaylog。
4、從庫(kù)的SQL Thread讀取relaylog的events,并將這些events應(yīng)用(或稱為重放)到從庫(kù)實(shí)例。

上述為默認(rèn)的異步復(fù)制邏輯,半同步復(fù)制又有些許不同,此處不再贅述。

此外,判斷從庫(kù)有延遲是十分簡(jiǎn)單的一件事:
在從庫(kù)上通過(guò)SHOW SLAVE STATUS
檢查Seconds_Behind_Master值即可。

產(chǎn)生延遲的原因及處理思路

〇 主庫(kù)DML請(qǐng)求頻繁(tps較大)

即主庫(kù)寫(xiě)請(qǐng)求較多,有大量insert、delete、update并發(fā)操作,短時(shí)間產(chǎn)生了大量的binlog。

【原因分析】

主庫(kù)并發(fā)寫(xiě)入數(shù)據(jù),而從庫(kù)SQL Thread為單線程應(yīng)用日志,很容易造成relaylog堆積,產(chǎn)生延遲。

【解決思路】

做sharding,通過(guò)scale out打散寫(xiě)請(qǐng)求?;蚩紤]升級(jí)到MySQL 5.7+,開(kāi)啟基于邏輯時(shí)鐘的并行復(fù)制。

〇 主庫(kù)執(zhí)行大事務(wù)

比如大量導(dǎo)入數(shù)據(jù),INSERT INTO $tb1 SELECT * FROM $tb2、LOAD DATA INFILE
比如UPDATEDELETE了全表等
Exec_Master_Log_Pos一直未變,Slave_SQL_Running_StateReading event from the relay log
分析主庫(kù)binlog,看主庫(kù)當(dāng)前執(zhí)行的事務(wù)也可知曉。

【原因分析】

假如主庫(kù)花費(fèi)200s更新了一張大表,在主從庫(kù)配置相近的情況下,從庫(kù)也需要花幾乎同樣的時(shí)間更新這張大表,此時(shí)從庫(kù)延遲開(kāi)始堆積,后續(xù)的events無(wú)法更新。

【解決思路】

拆分大事務(wù),及時(shí)提交。

〇 主庫(kù)對(duì)大表執(zhí)行DDL語(yǔ)句

現(xiàn)象和主庫(kù)執(zhí)行大事務(wù)相近。
檢查Exec_Master_Log_Pos一直未動(dòng),也有可能是在執(zhí)行DDL。
分析主庫(kù)binlog,看主庫(kù)當(dāng)前執(zhí)行的事務(wù)也可知曉。

【原因分析】

1、DDL未開(kāi)始,被阻塞,SHOW SLAVE STATUS檢查到Slave_SQL_Running_Statewaiting for table metadata lock,且Exec_Master_Log_Pos不變。
2、DDL正在執(zhí)行,SQL Thread單線程應(yīng)用導(dǎo)致延遲增加。Slave_SQL_Running_Statealtering table,Exec_Master_Log_Pos不變

【解決思路】

通過(guò)processlistinformation_schema.innodb_trx來(lái)找到阻塞DDL語(yǔ)句的查詢,干掉該查詢,讓DDL正常在從庫(kù)執(zhí)行。
DDL本身造成的延遲難以避免,建議考慮:
① 業(yè)務(wù)低峰期執(zhí)行
set sql_log_bin=0后,分別在主從庫(kù)上手動(dòng)執(zhí)行DDL(此操作對(duì)于某些DDL操作會(huì)造成數(shù)據(jù)不一致,請(qǐng)務(wù)必嚴(yán)格測(cè)試)

〇 主庫(kù)與從庫(kù)配置不一致:

【原因分析】

硬件上:主庫(kù)實(shí)例服務(wù)器使用SSD,而從庫(kù)實(shí)例服務(wù)器使用普通SAS盤、cpu主頻不一致等
配置上:如RAID卡寫(xiě)策略不一致,OS內(nèi)核參數(shù)設(shè)置不一致,MySQL落盤策略不一致等

【解決思路】

盡量統(tǒng)一DB機(jī)器的配置(包括硬件及選項(xiàng)參數(shù))
甚至對(duì)于某些OLAP業(yè)務(wù),從庫(kù)實(shí)例硬件配置高于主庫(kù)等

〇 表缺乏主鍵或唯一索引

binlog_format=row的情況下,如果表缺乏主鍵或唯一索引,在UPDATE、DELETE的時(shí)候可能會(huì)造成從庫(kù)延遲驟增。
此時(shí)Slave_SQL_Running_StateReading event from the relay log。
并且SHOW OPEN TABLES WHERE in_use=1的表一直存在。
Exec_Master_Log_Pos不變。
mysqld進(jìn)程的cpu幾近100%(無(wú)讀業(yè)務(wù)時(shí)),io壓力不大

【原因分析】

做個(gè)極端情況下的假設(shè),主庫(kù)更新一張500w表中的20w行數(shù)據(jù),該update語(yǔ)句需要全表掃描
而row格式下,記錄到binlog的為20w次update操作,此時(shí)SQL Thread重放將特別慢,每一次update可能需要進(jìn)行一次全表掃描

【解決思路】

檢查表結(jié)構(gòu),保證每個(gè)表都有顯式自增主鍵,并建立合適索引。

〇 從庫(kù)自身壓力過(guò)大

【原因分析】

從庫(kù)執(zhí)行大量select請(qǐng)求,或業(yè)務(wù)大部分select請(qǐng)求被路由到從庫(kù)實(shí)例上,甚至大量OLAP業(yè)務(wù),或者從庫(kù)正在備份等。
此時(shí)可能造成cpu負(fù)載過(guò)高,io利用率過(guò)高等,導(dǎo)致SQL Thread應(yīng)用過(guò)慢。

【解決思路】

建立更多從庫(kù),打散讀請(qǐng)求,降低現(xiàn)有從庫(kù)實(shí)例的壓力。

〇 MyISAM存儲(chǔ)引擎

此時(shí)從庫(kù)Slave_SQL_Running_StateWaiting for table level lock

【原因分析】

MyISAM只支持表級(jí)鎖,并且讀寫(xiě)不可并發(fā)操作。
主庫(kù)在設(shè)置@@concurrent_insert對(duì)應(yīng)值的情況下,能并發(fā)在select時(shí)執(zhí)行insert,但從庫(kù)SQL Thread重放時(shí)并不可并發(fā),有興趣可以再去看看myisam這塊的實(shí)現(xiàn)。

【解決思路】

當(dāng)然是選擇原諒它了,既然選擇了MyISAM,那么也應(yīng)該要有心理準(zhǔn)備。(還存在其他場(chǎng)景,也不推薦MyISAM在復(fù)制結(jié)構(gòu)中使用)
改成InnoDB吧。

總結(jié):

通過(guò)SHOW SLAVE STATUSSHOW PROCESSLIST查看現(xiàn)在從庫(kù)的情況。(順便也可排除在從庫(kù)備份時(shí)這種原因)
Exec_Master_Log_Pos不變,考慮大事務(wù)、DDL、無(wú)主鍵,檢查主庫(kù)對(duì)應(yīng)的binlog及position即可。
Exec_Master_Log_Pos變化,延遲逐步增加,考慮從庫(kù)機(jī)器負(fù)載,如io、cpu等,并考慮主庫(kù)寫(xiě)操作與從庫(kù)自身壓力是否過(guò)大。

如果上述原因都沒(méi)有,那么請(qǐng)教請(qǐng)教DBA大佬們吧。

當(dāng)然,Seconds_Behind_Master也不一定準(zhǔn)確,存在在少部分場(chǎng)景下,雖Seconds_Behind_Master為0,但主從數(shù)據(jù)不一致的情況。
這將是另一篇博文了。

全文完。

以上就是MySQL主從復(fù)制延遲原因以及解決方案的詳細(xì)內(nèi)容,更多關(guān)于MySQL主從復(fù)制延遲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL的主從備份方式(一主一從)

    MySQL的主從備份方式(一主一從)

    這篇文章主要介紹了MySQL的主從備份方式(一主一從),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 遠(yuǎn)程連接mysql錯(cuò)誤代碼1130的解決方法

    遠(yuǎn)程連接mysql錯(cuò)誤代碼1130的解決方法

    這篇文章主要介紹了遠(yuǎn)程連接mysql錯(cuò)誤代碼1130的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • MySQL5.6 GTID模式下同步復(fù)制報(bào)錯(cuò)不能跳過(guò)的解決方法

    MySQL5.6 GTID模式下同步復(fù)制報(bào)錯(cuò)不能跳過(guò)的解決方法

    搭建虛擬機(jī)centos6.0, mysql5.6.10主從復(fù)制,死活不同步,搞了一整天找到這篇文章終于OK了,特分享一下,需要的朋友可以參考下
    2020-04-04
  • mysql8.0.30安裝配置最詳細(xì)教程(windows?64位)

    mysql8.0.30安裝配置最詳細(xì)教程(windows?64位)

    這篇文章主要給大家介紹了關(guān)于windows?64位下mysql8.0.30安裝配置的相關(guān)資料,主要以圖片的形式展示安裝教程x,簡(jiǎn)單易懂,小白專屬,需要的朋友可以參考下
    2022-09-09
  • MySQL 中只統(tǒng)計(jì)周一到周五的到訪數(shù)據(jù)(案例演示)

    MySQL 中只統(tǒng)計(jì)周一到周五的到訪數(shù)據(jù)(案例演示)

    文章介紹了如何在醫(yī)院信息系統(tǒng)中高效統(tǒng)計(jì)工作日到訪人數(shù),避免全表掃描和索引失效的問(wèn)題,通過(guò)生成列和使用日期維表,可以實(shí)現(xiàn)快速查詢和報(bào)表分析,適用于大型醫(yī)院的復(fù)雜數(shù)據(jù)量,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • MySQL索引失效之隱式轉(zhuǎn)換的問(wèn)題

    MySQL索引失效之隱式轉(zhuǎn)換的問(wèn)題

    本文主要介紹了MySQL索引失效之隱式轉(zhuǎn)換的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 深入談?wù)凪ySQL中的自增主鍵

    深入談?wù)凪ySQL中的自增主鍵

    這篇文章主要給大家介紹了關(guān)于MySQL中自增主鍵的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 解決mysql連接錯(cuò)誤errorCode 0,state 08S01

    解決mysql連接錯(cuò)誤errorCode 0,state 08S01

    這篇文章主要介紹了解決mysql連接錯(cuò)誤errorCode 0,state 08S01,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • mysql 索引合并的使用

    mysql 索引合并的使用

    索引合并是mysql底層為我們提供的智能算法。本文就介紹了mysql 索引合并的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • mysql 控制臺(tái)程序的提示符 prompt 字符串設(shè)置

    mysql 控制臺(tái)程序的提示符 prompt 字符串設(shè)置

    mysql 控制臺(tái)程序的提示符 prompt 字符串設(shè)置,學(xué)習(xí)mysql的朋友可以參考下。
    2011-08-08

最新評(píng)論

含山县| 丘北县| 扶沟县| 上栗县| 沅陵县| 晋城| 淄博市| 苍山县| 安义县| 温州市| 桦川县| 台北县| 吕梁市| 恩平市| 连江县| 娄烦县| 蕉岭县| 张家港市| 长沙县| 富蕴县| 邵武市| 方城县| 河间市| 恩施市| 通许县| 汕尾市| 上犹县| 伊金霍洛旗| 思茅市| 清苑县| 奎屯市| 河曲县| 尼木县| 鹰潭市| 大洼县| 武清区| 旬邑县| 岳西县| 新龙县| 文安县| 扶沟县|