問題原因:
? ? ? 今天線上環(huán)境,突然出現(xiàn)一個問題蜜宪,追蹤原因是數(shù)據(jù)庫中的一條語句報錯虫埂,錯誤內(nèi)容:
lock wait timeout exceeded; try restarting transactio
? ? ? 執(zhí)行update table set status = 1 where id = 10002;是可以的。
? ? ? 而執(zhí)行update table set status = 1 where id = 10001;這條語句執(zhí)行失敗圃验。
? ? ? 錯誤提示的意思掉伏,很明顯,是因為這條語句被鎖住了澳窑。所以釋放這個鎖斧散。
解決方案:
? ? ? 新創(chuàng)建的數(shù)據(jù)庫,是這樣子的:
? ? ? 現(xiàn)在我們要查test庫中使用情況摊聋,我們可以到information_schema中查詢
? ? ? ? 解釋:information_schema這張數(shù)據(jù)表保存了MySQL服務器所有數(shù)據(jù)庫的信息鸡捐。如數(shù)據(jù)庫名,數(shù)據(jù)庫的表栗精,表欄的數(shù)據(jù)類型與訪問權限等闯参。再簡單點,這臺MySQL服務器上悲立,到底有哪些數(shù)據(jù)庫鹿寨、各個數(shù)據(jù)庫有哪些表,每張表的字段類型是什么薪夕,各個數(shù)據(jù)庫要什么權限才能訪問脚草,等等信息都保存在information_schema表里面。
我們可以用下面三張表來查原因:
? ? ? innodb_trx ## 當前運行的所有事務
? ? ? innodb_locks ## 當前出現(xiàn)的鎖
? ? ? innodb_lock_waits ## 鎖等待的對應關系
如果數(shù)據(jù)庫中有鎖的話原献,那么在
? ? ? 圖中紅色語句為占用系統(tǒng)資源的語句馏慨,我們需要殺掉這個鎖,執(zhí)行 kill 線程id號姑隅。上面這條記錄的id為319618246
所以我們執(zhí)行:kill 319618246即可
執(zhí)行之后:
其他的記錄不需要關注写隶,因為其他的記錄狀態(tài)為“RUNNING” 即正在執(zhí)行的事務,并沒有鎖讲仰。慕趴。
? ? ? 我們可以進一步了解一下 那三張表的表結構:
---------------------
來源:CSDN
原文:https://blog.csdn.net/zc474235918/article/details/72731363
版權聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!