MySQL數(shù)據(jù)延遲跳動(dòng)的問(wèn)題解決
今天分析了另外一個(gè)關(guān)于數(shù)據(jù)庫(kù)延遲跳動(dòng)的問(wèn)題,也算是比較典型,這個(gè)過(guò)程中也有一些分析問(wèn)題的方法和技巧工參考。
首先在高可用檢測(cè)中,有一套環(huán)境的檢測(cè)時(shí)斷時(shí)續(xù),經(jīng)過(guò)排查發(fā)現(xiàn)是數(shù)據(jù)庫(kù)產(chǎn)生了延遲,在登錄到從庫(kù)show slave status查看,會(huì)發(fā)現(xiàn)Seconds_behind_master的值是不斷跳動(dòng)的,即從0~39~0~39這樣的頻率不斷跳動(dòng),讓人很搓火。
查看數(shù)據(jù)庫(kù)的相關(guān)日志發(fā)現(xiàn)竟然沒(méi)有任何可以參考的日志記錄,怎么分析這個(gè)問(wèn)題呢,我們先來(lái)復(fù)現(xiàn),于是我按照節(jié)奏抓取了3次問(wèn)題出現(xiàn)的日志,即通過(guò)show slave status連續(xù)監(jiān)測(cè),抓取show slave status輸出的結(jié)果保存下來(lái),這樣我們就得到了一個(gè)問(wèn)題發(fā)生過(guò)程中的偏移量變化,而這個(gè)變化則是在SQLThread在回放過(guò)程中產(chǎn)生的問(wèn)題。
比如下面的一段輸出,我截取的是Slave端的relay log進(jìn)行分析,相應(yīng)的字段為Relay_Log_Pos
Slave_IO_State: Waiting for master to send event Master_Host: xxxx Master_User: dba_repl Master_Port: 4306 Connect_Retry: 60 Master_Log_File: mysqlbin.000044 Read_Master_Log_Pos: 386125369 Relay_Log_File: slave-relay-bin.000066 Relay_Log_Pos: 386125580 Relay_Master_Log_File: mysqlbin.000044
所以很快得到了偏移量的變化情況:385983806 ,386062813 ,386125580
接著我使用mysqlbinlog開(kāi)始分析這些日志過(guò)程中的明細(xì),根據(jù)如下的命令可以很快得到轉(zhuǎn)儲(chǔ)的日志中相關(guān)的表有3張。
# grep INSERT relaylog_xxxx.dump |awk '{print $3 " " $4}'|sed 's/INTO//g'|sort|uniq act_action_exec_info act_join_desc dic_subsidy_marketing_querylog_202008
我逐步分析了每張表的數(shù)據(jù)操作情況,得到的信息還是比較有限,繼續(xù)做更進(jìn)一步的分析,比如我們分析一下整個(gè)日志中的事務(wù)量大?。?/p>
# mysqlbinlog slave-relay-bin.000066 | grep "GTID$(printf '\t')last_committed" -B 1 \ > | grep -E '^# at' | awk '{print $3}' \ > | awk 'NR==1 {tmp=$1} NR>1 {print ($1-tmp);tmp=$1}' \ > | sort -n -r | head -n 100 mysqlbinlog: [Warning] unknown variable 'loose-default-character-set=utf8' 5278 5268 5268 5268 5253 5253 5253 5253 5253
可以看到是5K左右,算是比較大了,而這些額外的信息從哪里獲得呢,我在主庫(kù)開(kāi)啟了general_log,這樣就能夠得到更細(xì)粒度的操作日志了。
進(jìn)一步分析發(fā)現(xiàn),整個(gè)業(yè)務(wù)使用了顯示事務(wù)的方式:SET autocommit=0,整個(gè)事務(wù)中包含了幾個(gè)大SQL,里面存儲(chǔ)了很多操作日志明細(xì),而且在事務(wù)操作過(guò)程中還基于Mybatis框架調(diào)用了多次select count(1) from xxx的操作。
經(jīng)過(guò)和業(yè)務(wù)溝通也基本明確了以上問(wèn)題。
以上就是MySQL數(shù)據(jù)延遲跳動(dòng)的問(wèn)題解決的詳細(xì)內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)延遲跳動(dòng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 如何解決mysql insert亂碼的問(wèn)題
- 如何解決mysql無(wú)法關(guān)閉的問(wèn)題
- 解決MySQL數(shù)據(jù)庫(kù)意外崩潰導(dǎo)致表數(shù)據(jù)文件損壞無(wú)法啟動(dòng)的問(wèn)題
- 一文解決django 2.2與mysql兼容性問(wèn)題
- 淺談mysql導(dǎo)出表數(shù)據(jù)到excel關(guān)于datetime的格式問(wèn)題
- 快速解決mysql導(dǎo)數(shù)據(jù)時(shí),格式不對(duì)、導(dǎo)入慢、丟數(shù)據(jù)的問(wèn)題
- 快速解決mysql導(dǎo)出scv文件亂碼、躥行的問(wèn)題
- Docker的MySQL容器時(shí)區(qū)問(wèn)題修改
- pyMySQL SQL語(yǔ)句傳參問(wèn)題,單個(gè)參數(shù)或多個(gè)參數(shù)說(shuō)明
- MySQL 5.7.30 安裝與升級(jí)問(wèn)題詳細(xì)教程
相關(guān)文章
Mysql InnoDB的鎖定機(jī)制實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于Mysql InnoDB的鎖定機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Last_Errno:?1062,Last_Error:?Error?Duplicate?entry
Last_Errno:?1062,Last_Error:?Error?Duplicate?entry?...?for?key?PRIMARY2014-02-02mysql如何查詢當(dāng)前數(shù)據(jù)庫(kù)中不為空的表
這篇文章主要介紹了mysql如何查詢當(dāng)前數(shù)據(jù)庫(kù)中不為空的表問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10有關(guān)mysql中sql的執(zhí)行順序的小問(wèn)題
在MySQL中我們可能會(huì)遇到一些關(guān)于執(zhí)行順序的問(wèn)題,下面小編就來(lái)帶大家了解一下原因以及如何解決2019-05-05ubuntu下mysql?8.0.28 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了ubuntu下mysql?8.0.28安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Explain命令在優(yōu)化查詢中的實(shí)際應(yīng)用
在MySQL中,EXPLAIN命令是一種非常重要的查詢優(yōu)化工具,它可以幫助我們分析SQL查詢語(yǔ)句的執(zhí)行計(jì)劃,以及如何優(yōu)化它們。本文介紹了Explain命令在優(yōu)化查詢中的實(shí)際應(yīng)用,感興趣的小伙伴可以參考閱讀2023-04-04MySQL數(shù)據(jù)庫(kù)備份過(guò)程的注意事項(xiàng)
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)備份過(guò)程的注意事項(xiàng),幫助大家更好的理解和維護(hù)MySQL,感興趣的朋友可以了解下2020-11-11mysql 中存在null和空時(shí)創(chuàng)建唯一索引的方法
據(jù)庫(kù)默認(rèn)值都有null,此時(shí)創(chuàng)建唯一索引時(shí)要注意了,此時(shí)數(shù)據(jù)庫(kù)會(huì)把空作為多個(gè)重復(fù)值2014-10-10