婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > MySQL主從復(fù)制延遲原因以及解決方案

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

熱門標(biāo)簽:申請(qǐng)外呼電話線路 芒果電話機(jī)器人自動(dòng)化 湖南人工外呼系統(tǒng)多少錢 石家莊電商外呼系統(tǒng) 日照旅游地圖標(biāo)注 百度地圖圖標(biāo)標(biāo)注中心 廣東人工電話機(jī)器人 信陽穩(wěn)定外呼系統(tǒng)運(yùn)營(yíng)商 南通自動(dòng)外呼系統(tǒng)軟件

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

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

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

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

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

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

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

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

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

【原因分析】

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

【解決思路】

做sharding,通過scale out打散寫請(qǐng)求。或考慮升級(jí)到MySQL 5.7+,開啟基于邏輯時(shí)鐘的并行復(fù)制。

〇 主庫執(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
分析主庫binlog,看主庫當(dāng)前執(zhí)行的事務(wù)也可知曉。

【原因分析】

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

【解決思路】

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

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

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

【原因分析】

1、DDL未開始,被阻塞,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 tableExec_Master_Log_Pos不變

【解決思路】

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

〇 主庫與從庫配置不一致:

【原因分析】

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

【解決思路】

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

〇 表缺乏主鍵或唯一索引

binlog_format=row的情況下,如果表缺乏主鍵或唯一索引,在UPDATEDELETE的時(shí)候可能會(huì)造成從庫延遲驟增。
此時(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%(無讀業(yè)務(wù)時(shí)),io壓力不大

【原因分析】

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

【解決思路】

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

〇 從庫自身壓力過大

【原因分析】

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

【解決思路】

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

〇 MyISAM存儲(chǔ)引擎

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

【原因分析】

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

【解決思路】

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

總結(jié):

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

如果上述原因都沒有,那么請(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)文章!

您可能感興趣的文章:
  • Mysql主從復(fù)制與讀寫分離圖文詳解
  • MYSQL數(shù)據(jù)庫GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)
  • MySql主從復(fù)制實(shí)現(xiàn)原理及配置
  • MySQL主從復(fù)制原理以及需要注意的地方
  • mysql 主從復(fù)制如何跳過報(bào)錯(cuò)
  • mysql主從復(fù)制配置過程
  • 全面解讀MySQL主從復(fù)制,從原理到安裝配置
  • MySQL 4種常用的主從復(fù)制架構(gòu)
  • 關(guān)于MySQL主從復(fù)制的幾種復(fù)制方式總結(jié)
  • MySQL 主從復(fù)制原理與實(shí)踐詳解
  • MySql主從復(fù)制機(jī)制全面解析

標(biāo)簽:惠州 沈陽 牡丹江 公主嶺 呼和浩特 合肥 阿里 天津

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL主從復(fù)制延遲原因以及解決方案》,本文關(guān)鍵詞  MySQL,主從,復(fù)制,延遲,原因,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL主從復(fù)制延遲原因以及解決方案》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL主從復(fù)制延遲原因以及解決方案的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 十堰市| 龙南县| 原阳县| 定兴县| 湄潭县| 垦利县| 若尔盖县| 潜江市| 苗栗县| 九龙城区| 阳城县| 焦作市| 同仁县| 洛川县| 象山县| 满洲里市| 正宁县| 塔城市| 上杭县| 桐城市| 景德镇市| 赤水市| 额尔古纳市| 晋宁县| 武义县| 咸阳市| 龙游县| 都兰县| 东港市| 灌云县| 江西省| 扶风县| 灵寿县| 南木林县| 柘城县| 敦煌市| 安岳县| 赞皇县| 华阴市| 都匀市| 涞水县|