create table t1_deadlock (a int); 操作已執(zhí)行 已用時(shí)間: 6.906(毫秒). 執(zhí)?..."/>
溫馨提示×

溫馨提示×

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

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

達(dá)夢8 死鎖模擬

發(fā)布時(shí)間:2020-08-10 22:15:33 來源:ITPUB博客 閱讀:232 作者:LEVEL7 欄目:數(shù)據(jù)庫

1.創(chuàng)建兩個(gè)簡單的表t1_deadlock和t2_deadlock,每個(gè)表中僅僅包含一個(gè)字段a

SQL> create table t1_deadlock (a int);

操作已執(zhí)行
已用時(shí)間: 6.906(毫秒). 執(zhí)行號:23.
SQL> create table t2_deadlock (a int);
操作已執(zhí)行
已用時(shí)間: 3.168(毫秒). 執(zhí)行號:24.

2.每張表中僅初始化一條數(shù)據(jù)

SQL> create table t2_deadlock (a int);

操作已執(zhí)行
已用時(shí)間: 3.168(毫秒). 執(zhí)行號:24.
SQL> insert into t1_deadlock values (1);
影響行數(shù) 1
已用時(shí)間: 0.566(毫秒). 執(zhí)行號:25.
SQL> insert into t2_deadlock values (2);
影響行數(shù) 1
已用時(shí)間: 0.803(毫秒). 執(zhí)行號:26.
SQL> commit;
操作已執(zhí)行
已用時(shí)間: 1.057(毫秒). 執(zhí)行號:27.

3.在第一個(gè)會話session1中更新表t1_deadlock中的記錄“1”為“1000”,不進(jìn)行提交

SQL> update t1_deadlock set a = 1000 where a = 1;

影響行數(shù) 1
已用時(shí)間: 1.608(毫秒). 執(zhí)行號:28.

4.在第二個(gè)會話session2中更新表t2_deadlock中的記錄“2”為“2000”,不進(jìn)行提交

SQL> update t2_deadlock set a = 2000 where a = 2;

影響行數(shù) 1
已用時(shí)間: 3.345(毫秒). 執(zhí)行號:29.

5.此時(shí),沒有任何問題發(fā)生。OK,現(xiàn)在注意一下下面的現(xiàn)象,我們再回到會話session1中,更新t2_deadlock的記錄

SQL> update t2_deadlock set a = 2000 where a = 2;

這里出現(xiàn)了“鎖等待”(“阻塞”)的現(xiàn)象,原因很簡單,因?yàn)樵趕ession2中已經(jīng)對這條數(shù)據(jù)執(zhí)行過這個(gè)操作,在session2中已經(jīng)對該行加了行級鎖。

注意,這里是“鎖等待”,不是“死鎖”,注意這兩個(gè)概念的區(qū)別!

6.我們關(guān)注的“死鎖”馬上就要隆重出場了:在會話session2中,更新t1_deadlock的記錄

SQL> update t1_deadlock set a = 1000 where a = 1;

update t1_deadlock set a = 1000 where a = 1;
[-6403]:死鎖.
已用時(shí)間: 310.980(毫秒). 執(zhí)行號:0.

7.以上種種現(xiàn)象說明什么?

說明: DM對于“死鎖”是會做自動處理的,而不是不聞不問。

8.總結(jié)

死鎖與阻塞的不同之處在于死鎖包括兩個(gè)或者多個(gè)已阻塞事務(wù),它們之間形成了等待環(huán),每個(gè)都等待其他事務(wù)釋放鎖。例如事務(wù)1給表T1上了排他鎖,第二個(gè)事務(wù)給表T2上了排他鎖,此時(shí)事務(wù)1請求T2的排他鎖,就會處于等待狀態(tài),被阻塞。若此時(shí)T2再請求表T1的排他鎖,則T2也處于阻塞狀態(tài)。此時(shí)這兩個(gè)事務(wù)發(fā)生死鎖,DM數(shù)據(jù)庫會選擇犧牲掉其中一個(gè)事務(wù)。

參考:《DM8系統(tǒng)管理員手冊》19.8 鎖等待與死鎖檢測

向AI問一下細(xì)節(jié)

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

AI