MySQL執行大事務會存在什么問題?
作者:派大星
拆分事務,將大事務分解為多個小事務。將不需要在事務中執行的操作(如讀取、內存計算、I/O操作、遠程調用等)移到事務外部處理。
前言
之前在如何實現百萬級數據從Excel導入中有提到一句不建議利用大事務進行一個錯誤處理。為什么不建議呢。本次來簡單說一下。

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

























