可以在 information_schema 庫的 innodb_trx 這個表中查詢長事務,比如下面這個語句,用於查找持續時間超過 60s 的事務:
select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60
- 主備延遲。如果主服務器執行大事務花費了10分鍾,那么從服務器就延遲了10分鍾。比如一次性用delete刪除太多數據。
- 長事務意味着系統里面會存在很老的事務視圖。由於這些事務隨時可能訪問數據庫里面的任何數據,所以這個事務提交之前,數據庫里面它可能用到的回滾記錄都必須保留,這就會導致大量占用存儲空間。
- 長事務還占用鎖資源,也可能拖垮整個庫。比如事務不提交,就會一直占着 MDL 鎖,后續的增刪改查就不能進行,請求頻繁的時候(重試)可能會導致線程爆滿。