溫馨提示×

溫馨提示×

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

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

MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩

發(fā)布時間:2021-10-25 09:20:25 來源:億速云 閱讀:112 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

其實使用不同的數(shù)據(jù)庫開發(fā)應用程序,本身沒有什么,但開發(fā)人員如果不熟悉所使用的數(shù)據(jù)庫,還沿用自己熟悉數(shù)據(jù)庫的處理方式來處理新的數(shù)據(jù)庫,那顯然就會造成很多麻煩,這點對其他職業(yè)也是一樣。

今天想說的是,習慣使用ORACLE 的程序員,在MYSQL 留下的麻煩怎么被發(fā)現(xiàn)。這兩種數(shù)據(jù)庫在處理事務上是有不同的,oracle 默認不會自動commit, 而mysql 會默認 auto commit, 說道auto commit ,四大數(shù)據(jù)庫,只有oracle  一家是不默認commit。

那問題出在哪里,如果當初在程序員使用mysql 上設置了 auto commit 為非自動(線程級別,或global),而后期某些原因,又忘記了,記得MYSQL 本身是默認是 auto commit 那亂子就來了。所以一般都會看看developer 的歷史,如果開發(fā)的歷史用沒有使用過mysql 則必然會多留心。

下面有一個例子,系統(tǒng)有一個更新一直過不去,一直報

Lock wait timeout exceeded; try restarting transaction

MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩

哪遇到這樣的問題,會想起什么,怎么處理這個問題。 第一個想法是看看 

show engine innodb stauts

MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩

MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩

看到上面的圖,的反映是什么,有線程霸占某些記錄的row lock 太長時間了,造成其他的session無法操作對應的記錄。  在往深里面想,就有可能是沒有commit 而造成的 session idel 而事務running 的問題。

遇到這樣的問題,需要找出當前那個 session 正在idel 但其實里面的 transaction 在running 的狀態(tài)。 

1 找到正在sleep的session

MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩

2 查看耗時較長的session中運行的語句

MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩

通過查看到較長耗時的語句,以及語句的 processlist_id 就可以大致找到當前在作妖的線程ID。

然后kill他就好。

當然還有另外一種情況,就是程序里面由于不嚴謹,導致大批量的begin 但沒有commit, 那這樣用上面的方法就不趕趟了,怎么來更快的發(fā)現(xiàn)這樣的問題

MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩

通過上圖的語句,去發(fā)現(xiàn)相關的計數(shù)器是否一致在瘋狂的上漲,那就證明當前的數(shù)據(jù)庫系統(tǒng)中存在或可能存在這樣的問題。

關于MYSQL怎么發(fā)現(xiàn)及處理沒有commit 留下的大麻煩就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

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

AI