資料塊內事務槽不足導致資料塊鎖
在資料塊內事務槽不足或沒有空間擴充套件時,對同一個資料塊內資料行的dml操作將表現為“資料塊鎖”,等待事件為“enq: TX - allocate ITL entr”,驗證如下。
1,測試表準備
[oracle@bnet95 udump]$ sqlplus mh/mh
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Feb 19 15:14:30 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
SQL> create table t(x int) pctfree 0;
Table created.
SQL> insert into t select rownum n from dba_objects where rownum<1000;
999 rows created.
SQL> commit;
Commit complete.
SQL>
SQL> select dbms_rowid.rowid_relative_fno(rowid) fno,
2 dbms_rowid.rowid_block_number(rowid) bno,
3 count(*) cnt
4 from t
5 group by dbms_rowid.rowid_relative_fno(rowid),
6 dbms_rowid.rowid_block_number(rowid);
SQL> select dbms_rowid.rowid_relative_fno(rowid) fno,
2 dbms_rowid.rowid_block_number(rowid) bno,
3 count(*) cnt
4 from t
5 group by dbms_rowid.rowid_relative_fno(rowid),
6 dbms_rowid.rowid_block_number(rowid);
FNO BNO CNT
---------- ---------- ----------
4 67252 733
4 67253 266
---------- ---------- ----------
4 67252 733
4 67253 266
SQL>
SQL> select x,
2 dbms_rowid.rowid_relative_fno(rowid) fno,
3 dbms_rowid.rowid_block_number(rowid) bno
4 from t
5 where x in (1, 2, 3, 4);
SQL> select x,
2 dbms_rowid.rowid_relative_fno(rowid) fno,
3 dbms_rowid.rowid_block_number(rowid) bno
4 from t
5 where x in (1, 2, 3, 4);
X FNO BNO
---------- ---------- ----------
1 4 67252
2 4 67252
3 4 67252
4 4 67252
---------- ---------- ----------
1 4 67252
2 4 67252
3 4 67252
4 4 67252
2,多個會話更新同一塊中的不同行
--會話1
SQL> select distinct sid from v$mystat;
SQL> select distinct sid from v$mystat;
SID
----------
769
----------
769
SQL> update t set x=x where x=1;
1 row updated.
SQL>
--會話2
SQL> select distinct sid from v$mystat;
SID
----------
755
----------
755
SQL> update t set x=x where x=2;
1 row updated.
SQL>
--會話3
SQL> select distinct sid from v$mystat;
SID
----------
831
----------
831
SQL> update t set x=x where x=3;
--blocked
--blocked
--會話4
SQL> select distinct sid from v$mystat;
SQL> select distinct sid from v$mystat;
SID
----------
763
----------
763
SQL> update t set x=x where x=4;
--blocked
3,檢視等待事件
--會話5
SQL> select sid, type, id1, id2, lmode, request, ctime, block
2 from v$lock
3 where sid in (769, 755, 831, 763)
4 order by ctime;
--會話5
SQL> select sid, type, id1, id2, lmode, request, ctime, block
2 from v$lock
3 where sid in (769, 755, 831, 763)
4 order by ctime;
SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
---------- -- ---------- ---------- ---------- ---------- ---------- ----------
763 TX 458756 60873 0 4 298 0
763 TM 155086 0 3 0 303 0 --會話4
831 TX 458756 60873 0 4 339 0
831 TM 155086 0 3 0 344 0 --會話3
755 TX 65549 52755 6 0 357 0
755 TM 155086 0 3 0 357 0 --會話2
769 TX 458756 60873 6 0 397 1
769 TM 155086 0 3 0 397 0 --會話1
---------- -- ---------- ---------- ---------- ---------- ---------- ----------
763 TX 458756 60873 0 4 298 0
763 TM 155086 0 3 0 303 0 --會話4
831 TX 458756 60873 0 4 339 0
831 TM 155086 0 3 0 344 0 --會話3
755 TX 65549 52755 6 0 357 0
755 TM 155086 0 3 0 357 0 --會話2
769 TX 458756 60873 6 0 397 1
769 TM 155086 0 3 0 397 0 --會話1
8 rows selected.
SQL>
SQL> col sid for 9999
SQL> r
1 select sid,
2 event,
3 p1,
4 p2,
5 p3,
6 row_wait_obj#,
7 row_wait_block#,
8 last_call_et,
9 blocking_session,
10 wait_time,
11 seconds_in_wait
12 from v$session
13* where sid in (769, 755, 831, 763)
SQL> col sid for 9999
SQL> r
1 select sid,
2 event,
3 p1,
4 p2,
5 p3,
6 row_wait_obj#,
7 row_wait_block#,
8 last_call_et,
9 blocking_session,
10 wait_time,
11 seconds_in_wait
12 from v$session
13* where sid in (769, 755, 831, 763)
SID EVENT P1 P2 P3 ROW_WAIT_OBJ# ROW_WAIT_BLOCK#
----- ------------------------------ ---------- ---------- ---------- ------------- ---------------
LAST_CALL_ET BLOCKING_SESSION WAIT_TIME SECONDS_IN_WAIT
------------ ---------------- ---------- ---------------
769 SQL*Net message from client 1650815232 1 0 340 50425 --會話1
1021 0 1021
----- ------------------------------ ---------- ---------- ---------- ------------- ---------------
LAST_CALL_ET BLOCKING_SESSION WAIT_TIME SECONDS_IN_WAIT
------------ ---------------- ---------- ---------------
769 SQL*Net message from client 1650815232 1 0 340 50425 --會話1
1021 0 1021
755 SQL*Net message from client 1650815232 1 0 -1 0 --會話2
981 0 981
981 0 981
831 enq: TX - allocate ITL entry 1415053316 458756 60873 -1 0 --會話3
968 769 0 963
968 769 0 963
763 enq: TX - allocate ITL entry 1415053316 458756 60873 -1 0 --會話4
927 769 0 922
927 769 0 922
==〉1,會話1、2正常更新,說明該塊有兩個itl slot,會話3、4被會話1阻塞,等待事件為enq: TX - allocate ITL entry;
2,v$lock中只給出了該會話阻塞了其他會話,並沒有給出被阻塞會話數量(v$lock.block:A value of either 0 or 1, depending on whether or not the lock in question is the blocker)
2,v$lock中只給出了該會話阻塞了其他會話,並沒有給出被阻塞會話數量(v$lock.block:A value of either 0 or 1, depending on whether or not the lock in question is the blocker)
SQL> alter system dump datafile 4 block 67252;
System altered.
--檢視該塊dump:
Block header dump: 0x010106b4
Object id on Block? Y
seg/obj: 0x25dce csc: 0x56f.f8d44b4d itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x10106b1 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.00d.0000ce13 0x008f0252.2f6d.07 ---- 1 fsc 0x0000.00000000
0x02 0x0007.004.0000edc9 0x008f1cec.34c4.03 ---- 1 fsc 0x0000.00000000
data_block_dump,data header at 0xe9eb464
===============
tsiz: 0x1f98
hsiz: 0x5cc
pbl: 0x0e9eb464
bdba: 0x010106b4
76543210
flag=--------
ntab=1
nrow=733 --行數
frre=-1
fsbo=0x5cc
fseo=0xbf7
avsp=0x7
tosp=0x7
0xe:pti[0] nrow=733 offs=0
0x12:pri[0] offs=0x1904
0x14:pri[1] offs=0x190a
0x16:pri[2] offs=0x1910
0x18:pri[3] offs=0x1916
0x1a:pri[4] offs=0x191c
0x1c:pri[5] offs=0x1922
0x1e:pri[6] offs=0x1928
...
0x5c6:pri[730] offs=0x11f9
0x5c8:pri[731] offs=0x1200
0x5ca:pri[732] offs=0x1207
block_row_dump:
tab 0, row 0, @0x1904 ==>6404
tl: 6 fb: --H-FL-- lb: 0x2 cc: 1 ==>itl 2
col 0: [ 2] c1 02 ==>x=1
tab 0, row 1, @0x190a
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1 ==>itl 1
col 0: [ 2] c1 03 ==>x=2
tab 0, row 2, @0x1910
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 04 ==>x=3
tab 0, row 3, @0x1916
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 05 ==>x=4
tab 0, row 4, @0x191c
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 06
tab 0, row 5, @0x1922
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 07
tab 0, row 6, @0x1928
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 08
...
tab 0, row 730, @0x11f9
tl: 7 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 3] c2 08 20 ==>x=731
tab 0, row 731, @0x1200
tl: 7 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 3] c2 08 21 ==>x=732
tab 0, row 732, @0x1207
tl: 7 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 3] c2 08 22 ==>x=733
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 67252 maxblk 67252
Block header dump: 0x010106b4
Object id on Block? Y
seg/obj: 0x25dce csc: 0x56f.f8d44b4d itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x10106b1 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.00d.0000ce13 0x008f0252.2f6d.07 ---- 1 fsc 0x0000.00000000
0x02 0x0007.004.0000edc9 0x008f1cec.34c4.03 ---- 1 fsc 0x0000.00000000
data_block_dump,data header at 0xe9eb464
===============
tsiz: 0x1f98
hsiz: 0x5cc
pbl: 0x0e9eb464
bdba: 0x010106b4
76543210
flag=--------
ntab=1
nrow=733 --行數
frre=-1
fsbo=0x5cc
fseo=0xbf7
avsp=0x7
tosp=0x7
0xe:pti[0] nrow=733 offs=0
0x12:pri[0] offs=0x1904
0x14:pri[1] offs=0x190a
0x16:pri[2] offs=0x1910
0x18:pri[3] offs=0x1916
0x1a:pri[4] offs=0x191c
0x1c:pri[5] offs=0x1922
0x1e:pri[6] offs=0x1928
...
0x5c6:pri[730] offs=0x11f9
0x5c8:pri[731] offs=0x1200
0x5ca:pri[732] offs=0x1207
block_row_dump:
tab 0, row 0, @0x1904 ==>6404
tl: 6 fb: --H-FL-- lb: 0x2 cc: 1 ==>itl 2
col 0: [ 2] c1 02 ==>x=1
tab 0, row 1, @0x190a
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1 ==>itl 1
col 0: [ 2] c1 03 ==>x=2
tab 0, row 2, @0x1910
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 04 ==>x=3
tab 0, row 3, @0x1916
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 05 ==>x=4
tab 0, row 4, @0x191c
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 06
tab 0, row 5, @0x1922
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 07
tab 0, row 6, @0x1928
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 2] c1 08
...
tab 0, row 730, @0x11f9
tl: 7 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 3] c2 08 20 ==>x=731
tab 0, row 731, @0x1200
tl: 7 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 3] c2 08 21 ==>x=732
tab 0, row 732, @0x1207
tl: 7 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 3] c2 08 22 ==>x=733
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 67252 maxblk 67252
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-754296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫死鎖導致分佈事務中大批量更新資料庫不成功資料庫
- dump資料塊
- 資料塊分析
- 資料塊原理
- 資料塊內部結構dump解析
- 【資料庫資料恢復】磁碟空間不足導致sql server錯誤的資料恢復資料庫資料恢復SQLServer
- Oracle資料塊格式Oracle
- 資料塊調整
- oracle資料塊概述Oracle
- oracle資料塊理解Oracle
- Oracle資料塊blockOracleBloC
- MySQL(一):MySQL資料庫事務與鎖MySql資料庫
- 恢復資料,資料塊恢復
- 資料塊、資料擴充套件、段套件
- 資料所在的資料塊實驗
- oracle block header_tail資料塊頭與資料塊尾OracleBloCHeaderAI
- Oracle資料庫壞塊(corruption)-物理壞塊Oracle資料庫
- 【伺服器資料恢復】多塊硬碟掉線導致儲存LUN不可用的資料恢復伺服器資料恢復硬碟
- 【北亞企安資料恢復】RAIDZ多塊磁碟離線導致崩潰的資料恢復案例資料恢復AI
- 2.6.5 指定資料塊大小
- 資料塊原理深入剖析
- rman 恢復資料塊
- rman恢復資料塊
- dump表的資料塊
- 轉儲資料塊玩玩
- 【北亞資料恢復】誤操作分割槽損壞導致SqlServer資料庫資料丟失的資料恢復資料恢復SQLServer資料庫
- 【伺服器資料恢復】哪些故障會導致伺服器資料丟失?多塊硬碟離線的資料恢復案例伺服器資料恢復硬碟
- 多塊硬碟離線導致raid6崩潰的資料恢復案例硬碟AI資料恢復
- undo表空間出現壞塊導致資料庫重啟問題解決資料庫
- 資料庫檔案壞塊損壞導致開啟時報錯的恢復方法資料庫
- bbed_recover:恢復資料塊資料庫資料庫
- 資料庫分割槽表分割槽未分配導致的一些問題資料庫
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- 大事務導致資料庫恢復時間長資料庫
- EM自動任務導致資料庫緩慢資料庫
- oracle僵死會話鎖住buffer,導致資料庫hang住Oracle會話資料庫
- 區塊鏈資料總結區塊鏈
- ORACLE 資料塊格式深入解析Oracle