91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL因大事務導致Insert慢怎么辦

發布時間:2021-06-21 15:34:21 來源:億速云 閱讀:1255 作者:小新 欄目:MySQL數據庫

這篇文章主要介紹了MySQL因大事務導致Insert慢怎么辦,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

【問題】

INSERT語句是最常見的SQL語句之一,最近有臺MySQL服務器不定時的會出現并發線程的告警,從記錄信息來看,有大量insert的慢查詢,執行幾十秒,等待flushing log,狀態query end

MySQL因大事務導致Insert慢怎么辦

【初步分析】

從等待資源來看,大部分時間消耗在了innodb_log_file階段,懷疑可能是磁盤問題導致,經過排查沒有發現服務器本身存在硬件問題

MySQL因大事務導致Insert慢怎么辦

后面開啟線程上升時pstack的自動采集,定位MySQL線程等待的位置。

【分析過程】

部署了pstack的自動抓取后,出現過6次thread concurrency >=50的告警(每次告警時會有大量的慢查詢產生),有3次抓到了現場。

并發線程升高時,有50多個線程卡在Stage_manager::enroll_for函數,處于group commit階段

MySQL因大事務導致Insert慢怎么辦

MySQL因大事務導致Insert慢怎么辦

線程0x519c5940對應的SQL語句如下,已經執行18秒

MySQL因大事務導致Insert慢怎么辦

Stage_manager::enroll_for函數的作用實現了多個線程在flush_stage階段的排隊。簡單來說,對于一個分組的事務,是被leader線程去提交的,其他線程處于排隊等待狀態,等待leader線程將該線程的事務提交完成。

如果第一個線程執行慢,后面的線程都處于等待狀態,整組事務無法提交。

MySQL因大事務導致Insert慢怎么辦

流程也可以理解如下,

Session A COMMIT-->拿到鎖-->進行binlog寫-->commit完成

Session B COMMIT-->等待鎖--------------------------->拿到鎖-->進行binlog寫-->commit完成

第一個線程為什么執行很慢,分析了發生告警時間段的日志文件,發現日志中存在2個15M和20M的大事務

MySQL因大事務導致Insert慢怎么辦

查看日志明細,存在delete from的大事務刪除語句,約包含23W條記錄,ROW模式下刪除23W條記錄,會產生大約20M的日志文件,刷盤時間較長,阻塞了同一個分組下其他事務的提交。

MySQL因大事務導致Insert慢怎么辦

事務的開始時間與告警時間吻合

積壓的分組下事務集中刷盤,反應到磁盤指標上可以看到在問題時間段的disk_write_kbytes指標出現明顯的上升

MySQL因大事務導致Insert慢怎么辦

【優化方案】

1、 建議開發避免使用delete from 整表的大事務刪除語句

【其他變通方案】

2、 Binlog 記錄的ROW模式下會產生大量的日志,改為MIXED模式,理論上也可以解決問題

3、 更換性能好的磁盤

感謝你能夠認真閱讀完這篇文章,希望小編分享的“MySQL因大事務導致Insert慢怎么辦”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通化县| 清原| 乌兰察布市| 永清县| 金溪县| 孟州市| 双峰县| 芒康县| 宜春市| 北川| 阜南县| 谢通门县| 赤峰市| 平江县| 林芝县| 娄烦县| 周口市| 宜昌市| 监利县| 乳山市| 浦北县| 临沭县| 内黄县| 莲花县| 新干县| 五峰| 双柏县| 自贡市| 潼南县| 句容市| 秀山| 怀来县| 罗平县| 梁平县| 泉州市| 额敏县| 清远市| 佛教| 连平县| 大连市| 永善县|