首頁  >  文章  >  資料庫  >  MySQL資料庫執行Update卡死問題怎麼解決

MySQL資料庫執行Update卡死問題怎麼解決

WBOY
WBOY轉載
2023-05-26 19:07:052772瀏覽

問題分析

一般都是資料庫事務未提交,導致update或delete卡死。

解決方案

  1. 執行完更新或刪除後,記得將交易提交commit;

  2. 找到資料庫用戶端,執行commit操作。

如果還不行。當資料庫執行資料操作失敗或交易未提交時,它會鎖定需要執行的SQL語句。

流程復現與解決

透過以下指令查看資料庫的自動提交狀態

show variables like 'autocommit';

透過SQL設定資料庫自動自動提交關閉

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;

表中資料如下:

MySQL資料庫執行Update卡死問題怎麼解決

開啟兩個視窗分別執行update操作

update car set color ='银色' where id = 1;
update car set color ='红色' where id = 1;

#查詢正在執行的交易:##

SELECT * FROM information_schema.INNODB_TRX;

MySQL資料庫執行Update卡死問題怎麼解決

根據圖中事務的執行緒ID(trx_mysql_thread_id)可以看出對應的mysql 執行緒:一個1084 (update正在等待鎖定)另一個是1089(update 正在執行沒有提交交易)

可以使用mysql指令殺掉執行緒:kill 執行緒id

kill 1089;

期間如果並未殺掉持有鎖的執行緒:則第二個update語句會提示等待鎖定逾時。

MySQL資料庫執行Update卡死問題怎麼解決

相關指令:

-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查询mysql数据库中存在的进程
select * from information_schema.`PROCESSLIST`(show processlist;)

擴充

oracle的操作方式:

查詢鎖定記錄

SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;

刪除鎖定記錄

ALTER system KILL session 'SID,serial#';

以上是MySQL資料庫執行Update卡死問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除