欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL數(shù)據(jù)庫執(zhí)行Update卡死問題的解決方法

 更新時(shí)間:2022年05月01日 11:51:35   作者:共飲一杯無  
最近開發(fā)的時(shí)候debug到一條update的sql語句時(shí)程序就不動(dòng)了,然后我就在plsql上試了一下,發(fā)現(xiàn)plsql一直在顯示正在執(zhí)行,等了好久也不出結(jié)果,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫執(zhí)行Update卡死問題的解決方法,需要的朋友可以參考下

執(zhí)行數(shù)據(jù)庫更新update操作的時(shí)候數(shù)據(jù)庫卡死了

問題分析

一般都是數(shù)據(jù)庫事務(wù)未提交,導(dǎo)致update或者delete卡死。

解決辦法

  1. 在執(zhí)行完更新或刪除后,記得將事務(wù)提交commit;
  2. 找到數(shù)據(jù)庫客戶端,執(zhí)行commit操作。

如果還不行。 那么應(yīng)該是數(shù)據(jù)庫在執(zhí)行數(shù)據(jù)操作失敗 or 事務(wù)未提交 之后,將需要執(zhí)行的sql語句鎖死了。

過程復(fù)現(xiàn)和解決

通過如下命令查看數(shù)據(jù)庫的自動(dòng)提交狀態(tài)

show variables like 'autocommit';

通過SQL設(shè)置數(shù)據(jù)庫自動(dòng)自動(dòng)提交為關(guān)閉

-- on為開啟,off為關(guān)閉
set autocommit=off;
-- 或者1為開啟,0為關(guān)閉
set autocommit=0;

表中數(shù)據(jù)如下:

打開兩個(gè)窗口分別執(zhí)行update操作

update car set color ='銀色' where id = 1;
update car set color ='紅色' where id = 1;

查詢正在執(zhí)行的事務(wù):

SELECT * FROM information_schema.INNODB_TRX;

根據(jù)圖中事務(wù)的線程ID(trx_mysql_thread_id)可以看出對(duì)應(yīng)的mysql 線程:一個(gè)1084 (update正在等待鎖)另一個(gè)是1089(update 正在執(zhí)行 沒有提交事務(wù))

可以使用mysql命令殺掉線程:kill 線程id

kill 1089;

期間如果并未殺掉持有鎖的線程:則第二個(gè)update語句會(huì)提示等待鎖超時(shí)。

相關(guān)命令:

-- 查看正在鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查詢mysql數(shù)據(jù)庫中存在的進(jìn)程
select * from information_schema.`PROCESSLIST`(show processlist;)  

擴(kuò)展

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#'; 

總結(jié)

到此這篇關(guān)于MySQL數(shù)據(jù)庫執(zhí)行Update卡死問題解決的文章就介紹到這了,更多相關(guān)MySQL執(zhí)行Update卡死內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論