2020-07-08:mysql只有一個表a,什么情況下會造成死鎖,解決辦法是什么?
福哥答案2020-07-08:
表鎖是不會出現死鎖的,但鎖等待現象是有可能的。
行鎖是行級別的,有可能出現死鎖。環形等待死鎖和唯一鍵死鎖 很常見。
避免死鎖方法:
1.減少事務操作的記錄數。
2.約定按相同順序訪問記錄。
3.對事務中要操作的記錄進行排序。
4.避免使用唯一鍵約束。
5.用表鎖,不用行鎖。
6.在事務中,如果要更新記錄,應該直接申請足夠級別的鎖,即排他鎖,而不應先申請共享鎖,更新時再申請排他鎖,因為當用戶申請排他鎖時,其他事務可能又已經獲得了相同記錄的共享鎖,從而造成鎖沖突,甚至死鎖。
解除正在死鎖的狀態有兩種方法:
第一種殺死會話:
1.查詢是否鎖表
show OPEN TABLES where In_use > 0;
2.查詢進程(如果您有SUPER權限,您可以看到所有線程。否則,您只能看到您自己的線程)
show processlist
或者查詢出所有需要Killd的Id;
select concat('KILL ',id,';') from information_schema.processlist where user='root';
3.殺死進程id(就是上面命令的id列)
kill id
第二種殺死事務:
1.查看下在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2.殺死進程id(就是上面命令的trx_Mysql_thread_id列)
kill 線程ID
例子:
查出死鎖進程:SHOW PROCESSLIST
殺掉進程 KILL 420821;
其它關于查看死鎖的命令:
1:查看當前的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2:查看當前鎖定的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3:查看當前等鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
沒標準答案,如果你有更好的答案,請直接評論。
任務調度 MySQL
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。