佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > MySQL的從庫Seconds_Behind_Master延遲總結(jié)

MySQL的從庫Seconds_Behind_Master延遲總結(jié)

熱門標(biāo)簽:鐵路電話系統(tǒng) 網(wǎng)站排名優(yōu)化 服務(wù)外包 百度競價排名 AI電銷 Linux服務(wù)器 地方門戶網(wǎng)站 呼叫中心市場需求

MySQL從庫Seconds_Behind_Master延遲總結(jié)

一、延遲分類

延遲我們可將其分為兩類:

1、第一類(成服務(wù)器有較高的負(fù)載)

這一類延遲情況可能造成服務(wù)器有較高的負(fù)載,可能是CPU/IO的負(fù)載。因為從庫在實際執(zhí)行Event,如果我們服務(wù)器的負(fù)載比較高應(yīng)該考慮這幾種情況,關(guān)于如何查看線程的負(fù)載可以參考29節(jié)。

大事務(wù)造成的延遲,其延遲不會從0開始增加,而是直接從主庫執(zhí)行了多久開始。比如主庫執(zhí)行這個事務(wù)花費的20秒,那么延遲就會從20開始,可以自己細(xì)心觀察一下很容易看到。這是因為Query Event中沒有準(zhǔn)確的執(zhí)行時間,這個在上一節(jié)的計算公式中詳細(xì)描述過了 ,可以參考第8節(jié)和第27節(jié)。

大表DDL造成的延遲,其延遲會從0開始增加,因為Query Event記錄了準(zhǔn)確的執(zhí)行時間。這個在上一節(jié)的計算公式中也詳細(xì)描述過了,可以參考第8節(jié)和第27節(jié)。

表沒有合理的使用主鍵或者唯一鍵造成的延遲。這種情況不要以為設(shè)置slave_rows_search_algorithms參數(shù)為 INDEX_SCAN,HASH_SCAN就可以完全解決問題,原因我們在第24節(jié)進(jìn)行了描述。

由于參數(shù)sync_relay_log,sync_master_info,sync_relay_log_info不合理導(dǎo)致,特別是sync_relay_log會極大的影響從庫的性能。原因我們在第26節(jié)進(jìn)行過描述,因為sync_relay_log設(shè)置為1會導(dǎo)致大量relay log刷盤操作。

是否從庫開啟了記錄binary log功能即log_slave_updates參數(shù)開啟,如果不是必要可以關(guān)閉掉。這種情況我遇到很多次了。

2、第二類(不會造成服務(wù)器有較高的負(fù)載)

這一類延遲情況往往不會造成服務(wù)器有較高的負(fù)載。它們要么沒有實際的執(zhí)行Event,要么就是做了特殊的操作造成的。

  • 長期未提交的事務(wù)可能造成延遲瞬間增加,因為GTID_EVENT和XID_EVENT是提交時間其他Event是命令發(fā)起的時間。這個我們在第27節(jié)中舉例描述過了。
  • Innodb層的行鎖造成的延遲,這種是在從庫有修改操作并且和SQL線程修改的數(shù)據(jù)有沖突的情況下造成的,因為我們前面23節(jié)說過SQL線程執(zhí)行Event也會開啟事務(wù)和獲取行鎖,下面我們進(jìn)行測試。
  • MySQL層的MDL LOCK造成的延遲,這種情況可能是由于SQL線程執(zhí)行某些DDL操作但是從庫上做了鎖表操作造成,原因我們已經(jīng)在23節(jié)描述過了,下面我們進(jìn)行測試。
  • MTS中不合理的設(shè)置參數(shù)slave_checkpoint_period參數(shù)導(dǎo)致,這個在第27節(jié)已經(jīng)測試過了。
  • 在從庫運行期間手動改大了從庫服務(wù)器時間,這個也在第27節(jié)已經(jīng)測試過了。

二、相關(guān)測試

因為上面的延遲情形很多我們都已經(jīng)測試和講述過了。下面我們測試鎖造成的延遲情形。

1、Innodb層的行鎖造成的延遲

這個很容測試,我只要先在從庫做一個事務(wù)和SQL線程修改的數(shù)據(jù)相同即可以出現(xiàn),大概測試如下:

從庫:
 
mysqlgt; begin;
Query OK, 0 rows affected (0.00 sec)
 
mysqlgt; delete from tmpk;
Query OK, 4 rows affected (0.00 sec)
不要提交
 
主庫執(zhí)行同樣的語句
mysqlgt; delete from tmpk;
Query OK, 4 rows affected (0.30 sec)

這個時候你會觀察到延遲如下:

如果查看sys.innodb_lock_waits能看到如下的結(jié)果:

當(dāng)然如果查看INNODB_TRX也可以觀察到事務(wù)的存在,這里就不截圖了,大家可以自己試試。

2、MySQL層的MDL LOCK造成的延遲

這種情況也非常容易測試,我們只需要開啟一個事務(wù)做一個select,然后主庫對同樣的表做DDL就可以出現(xiàn)如下:

從庫:
mysqlgt; begin;
Query OK, 0 rows affected (0.00 sec)
 
mysqlgt;
mysqlgt;
mysqlgt; select * from tkkk limit 1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    3 |    3 |  100 |
+------+------+------+
1 row in set (0.00 sec)
 
不要提交,表上MDL LOCK就不會釋放
 
主庫執(zhí)行語句:
 
mysqlgt; alter table tmpk add testc int ;
Query OK, 0 rows affected (1.14 sec)
Records: 0  Duplicates: 0  Warnings: 0
 

這個時候你將會看到如下的信息:

我們可以通過state看到這是等待MDL lock獲取而導(dǎo)致的延遲,關(guān)于MDL lock的詳情可以參考文章:

https://www.jb51.net/article/221412.htm

三、總結(jié)

通過整個系列,我們應(yīng)該清楚了Seconds_Behind_Master計算的方法,同時如果出現(xiàn)了延遲,我們首先查看從庫是否有負(fù)載,根據(jù)是否有負(fù)載進(jìn)行區(qū)別對待,注意這里的負(fù)載一定要使用top -H查看io/sql/worker線程的負(fù)載。我曾不止一次的遇到朋友問我延遲問題,當(dāng)我問他負(fù)載如何的時候他告訴我負(fù)載不高啊整體負(fù)載也就不到2,這里我們應(yīng)該注意的是對于一個線程只能使用到一個CPU核,雖然整體負(fù)載不到2但是可能io/sql/worker線程已經(jīng)跑滿了,實際上負(fù)載已經(jīng)很高了,我們來看下面的這個截圖就是sql線程負(fù)載高的截圖如下:

這個截圖我們發(fā)現(xiàn)雖然整體負(fù)載不高在1多一點,但是Lwp號20092的線程已經(jīng)跑滿了,這個線程就是我們的sql線程,這個時候出現(xiàn)延遲是很可能的,這個截圖正是來自一個沒有合理使用主鍵或者唯一鍵造成的延遲的案例,案例如下:

https://www.jb51.net/article/221396.htm

我們查看CPU負(fù)載應(yīng)該使用top -H去查看,查看io負(fù)載可以使用iotop,iostat等工具。我需要強(qiáng)調(diào)一下看MySQL負(fù)載的時候我們必須用線程的眼光去看

以上就是MySQL從庫Seconds_Behind_Master延遲總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于從庫Seconds_Behind_Master延遲總結(jié)的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL 發(fā)生同步延遲時Seconds_Behind_Master還為0的原因
  • 詳解MySQL的Seconds_Behind_Master
  • python3文件復(fù)制、延遲文件復(fù)制任務(wù)的實現(xiàn)方法
  • docker實現(xiàn)mysql主從復(fù)制的示例代碼
  • MySQL數(shù)據(jù)庫 Load Data 多種用法
  • MySQL數(shù)據(jù)庫Shell import_table數(shù)據(jù)導(dǎo)入
  • Mysql數(shù)據(jù)庫的主從同步配置
  • Mysql實現(xiàn)簡易版搜索引擎的示例代碼
  • MySQL命令無法輸入中文問題的解決方式
  • 當(dāng)面試官問mysql中char與varchar的區(qū)別

標(biāo)簽:仙桃 蘭州 衡水 湘潭 黃山 銅川 崇左 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL的從庫Seconds_Behind_Master延遲總結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    若羌县| 乌拉特前旗| 承德市| 乐业县| 揭东县| 神木县| 遂宁市| 龙川县| 通许县| 石家庄市| 新宾| 牡丹江市| 彩票| 新民市| 武乡县| 丰都县| 柳河县| 海门市| 日照市| 张家川| 梁平县| 宝鸡市| 新平| 镇康县| 龙江县| 方正县| 牟定县| 蚌埠市| 蒙山县| 曲阳县| 册亨县| 高清| 政和县| 永新县| 上栗县| 东平县| 稻城县| 三河市| 安丘市| 巴彦淖尔市| 英吉沙县|