Oracle同時插入同一行記錄時產生阻塞的處理分析

來源:互聯網
上載者:User

(4號鎖分析之Unique key的約束)

之前有個客戶提出,在insert的時候被hang住了,碰到這樣的問題很可能是鎖的問題。對於這樣的問題我一般就會想到幾個常用的視圖:v$lock/v$transaction/v$session/v$sql,仔細觀察就可以查出問題的所在。

好,那我們現在去分析一下上面的現象,分析問題的一個常規手段就是能類比故障的重現,我來試試類比一下:

1.查出當前操作的會話號為125

SQL> select sid from v$mystat where rownum=1;

SID

----------

125

 

2.建立表及插入資料

SQL>  create table t_gyj(id int primary key,name varchar2(10));

Table created.

SQL> insert into t_gyj values(1,'gyj1');

1 row created.

注意這裡先不要commit(提交).

3.再開一個會話,會話號為17

SQL> select sid from v$mystat where rownum=1;

SID

----------

 17  

4.在17號會話上插入同樣的一條記錄,這時被阻塞了.

SQL> insert into t_gyj values(1,'gyj1');

這裡就出現了上面提到的同時插入同一行記錄,產生阻塞的現象,現象出現我們如何判斷分析呢?

5.開始分析,剛剛提到幾個視圖v$lock,v$transaction,v$session,v$sql,這幾個視圖是DBA必須的.

為了方便查詢,我在上面的操作特意把會話號給顯示一下125號和17號會話.

被阻塞了我們一般首先會想到是不是鎖住了

OK,我再開一個會話:

SQL>  select sid from v$mystat where rownum=1;

SID

----------

 19

SQL> set linesize 1000

SQL>  select * from v$lock where sid in (125,17);

ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------

00000003A445F998 00000003A445F9F0        125 AE        100          0          4          0        883          0

00000003A44601D0 00000003A4460228         17 AE        100          0          4          0        595          0

00000003A44602A0 00000003A44602F8         17 TX     327681       1022          0          4        474          0

FFFFFD7FFC9F2040 FFFFFD7FFC9F20A0         17 TM      74868          0          3          0        474          0

FFFFFD7FFC9F2040 FFFFFD7FFC9F20A0        125 TM      74868          0          3          0        565          0

00000003A2CFF908 00000003A2CFF980         17 TX     458765        764          6          0        474          0

00000003A2D3E928 00000003A2D3E9A0        125 TX     327681       1022          6          0        565          1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.