主頁(yè) > 知識(shí)庫(kù) > MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析

MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析

熱門(mén)標(biāo)簽:外呼系統(tǒng)防封號(hào)違法嗎 高德地圖標(biāo)注模式 電銷機(jī)器人針對(duì)的 寶應(yīng)電信400電話辦理費(fèi)用 外呼系統(tǒng)服務(wù) 400電話辦理都選易號(hào)網(wǎng) 高德地圖標(biāo)注中心個(gè)人注冊(cè) 湘潭電銷機(jī)器人咨詢電話 如何在高德地圖標(biāo)注新地址

【問(wèn)題】

INSERT語(yǔ)句是最常見(jiàn)的SQL語(yǔ)句之一,最近有臺(tái)MySQL服務(wù)器不定時(shí)的會(huì)出現(xiàn)并發(fā)線程的告警,從記錄信息來(lái)看,有大量insert的慢查詢,執(zhí)行幾十秒,等待flushing log,狀態(tài)query end

【初步分析】

從等待資源來(lái)看,大部分時(shí)間消耗在了innodb_log_file階段,懷疑可能是磁盤(pán)問(wèn)題導(dǎo)致,經(jīng)過(guò)排查沒(méi)有發(fā)現(xiàn)服務(wù)器本身存在硬件問(wèn)題

后面開(kāi)啟線程上升時(shí)pstack的自動(dòng)采集,定位MySQL線程等待的位置。

【分析過(guò)程】

部署了pstack的自動(dòng)抓取后,出現(xiàn)過(guò)6次thread concurrency >=50的告警(每次告警時(shí)會(huì)有大量的慢查詢產(chǎn)生),有3次抓到了現(xiàn)場(chǎng)。

并發(fā)線程升高時(shí),有50多個(gè)線程卡在Stage_manager::enroll_for函數(shù),處于group commit階段

線程0x519c5940對(duì)應(yīng)的SQL語(yǔ)句如下,已經(jīng)執(zhí)行18秒

Stage_manager::enroll_for函數(shù)的作用實(shí)現(xiàn)了多個(gè)線程在flush_stage階段的排隊(duì)。簡(jiǎn)單來(lái)說(shuō),對(duì)于一個(gè)分組的事務(wù),是被leader線程去提交的,其他線程處于排隊(duì)等待狀態(tài),等待leader線程將該線程的事務(wù)提交完成。

如果第一個(gè)線程執(zhí)行慢,后面的線程都處于等待狀態(tài),整組事務(wù)無(wú)法提交。

流程也可以理解如下,

Session A COMMIT-->拿到鎖-->進(jìn)行binlog寫(xiě)-->commit完成

Session B COMMIT-->等待鎖--------------------------->拿到鎖-->進(jìn)行binlog寫(xiě)-->commit完成

第一個(gè)線程為什么執(zhí)行很慢,分析了發(fā)生告警時(shí)間段的日志文件,發(fā)現(xiàn)日志中存在2個(gè)15M和20M的大事務(wù)

查看日志明細(xì),存在delete from的大事務(wù)刪除語(yǔ)句,約包含23W條記錄,ROW模式下刪除23W條記錄,會(huì)產(chǎn)生大約20M的日志文件,刷盤(pán)時(shí)間較長(zhǎng),阻塞了同一個(gè)分組下其他事務(wù)的提交。

事務(wù)的開(kāi)始時(shí)間與告警時(shí)間吻合

積壓的分組下事務(wù)集中刷盤(pán),反應(yīng)到磁盤(pán)指標(biāo)上可以看到在問(wèn)題時(shí)間段的disk_write_kbytes指標(biāo)出現(xiàn)明顯的上升

【優(yōu)化方案】

1、 建議開(kāi)發(fā)避免使用delete from 整表的大事務(wù)刪除語(yǔ)句

【其他變通方案】

2、 Binlog 記錄的ROW模式下會(huì)產(chǎn)生大量的日志,改為MIXED模式,理論上也可以解決問(wèn)題

3、 更換性能好的磁盤(pán)

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • MySQL 8.0統(tǒng)計(jì)信息不準(zhǔn)確的原因
  • MySQL如何快速導(dǎo)入數(shù)據(jù)
  • 5個(gè)MySQL GUI工具推薦,幫助你進(jìn)行數(shù)據(jù)庫(kù)管理
  • Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程
  • Python如何爬取51cto數(shù)據(jù)并存入MySQL
  • MYSQL SERVER收縮日志文件實(shí)現(xiàn)方法
  • MySQL為什么要避免大事務(wù)以及大事務(wù)解決的方法

標(biāo)簽:南充 馬鞍山 黃山 宿遷 賀州 佛山 黔南 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析》,本文關(guān)鍵詞  MySQL,因大,事務(wù),導(dǎo)致,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章