MySQL執(zhí)行大事務(wù)會存在什么問題?
作者:派大星
拆分事務(wù),將大事務(wù)分解為多個小事務(wù)。將不需要在事務(wù)中執(zhí)行的操作(如讀取、內(nèi)存計算、I/O操作、遠程調(diào)用等)移到事務(wù)外部處理。
前言
之前在如何實現(xiàn)百萬級數(shù)據(jù)從Excel導入中有提到一句不建議利用大事務(wù)進行一個錯誤處理。為什么不建議呢。本次來簡單說一下。
所謂大事務(wù),通常指包含大量要執(zhí)行的SQL語句和較長執(zhí)行時間的事務(wù)。
這樣的大事務(wù)往往會帶來諸多問題。如下:
- 占用數(shù)據(jù)庫連接:這一點很好理解。隨著SQL語句的增多,執(zhí)行時間也會相應(yīng)延長。大型事務(wù)會持續(xù)占用數(shù)據(jù)庫連接,由于數(shù)據(jù)庫連接資源有限,長時間占用可能導致其他事務(wù)無法獲取連接,從而降低系統(tǒng)的吞吐量,影響系統(tǒng)的可用性。
- 難以回滾:大事務(wù)涉及的數(shù)據(jù)量較大,回滾操作可能變得異常耗時。若事務(wù)需要回滾或失敗,可能需要花費大量時間才能完全撤銷所有修改,對數(shù)據(jù)庫的可靠性和性能造成不利影響。
- 鎖競爭:大事務(wù)可能引發(fā)繁瑣的寫操作,導致數(shù)據(jù)的鎖定。這可能導致其他并發(fā)事務(wù)在訪問相同資源時遭遇鎖競爭,進而造成性能下降和延遲增加。長時間的鎖定還可能導致其他事務(wù)的等待和阻塞。
- 日志空間占用:大事務(wù)可能產(chǎn)生大量日志,特別是 binlog。當單個事務(wù)超出最大允許的Binlog文件大小限制(max_binlog_cache_size),會出現(xiàn)錯誤:Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again
解決方案:
拆分事務(wù),將大事務(wù)分解為多個小事務(wù)。將不需要在事務(wù)中執(zhí)行的操作(如讀取、內(nèi)存計算、I/O操作、遠程調(diào)用等)移到事務(wù)外部處理。
責任編輯:武曉燕
來源:
碼上遇見你