insert 引起的db file sequential read等待

數據庫中頻繁出現會話等待(dbfile sequential read),一張大表135G上面創建有四個單列索引,經查詢確認此等待(dbfile sequential read)是由於一條insert語句引起,按照常理來說 insertdb filesequential read等待是兩個完全不搭邊的,經分析是由於表上的索引引起,表在進行insert 時,索引也在同時進行維護更新,需要查詢索引塊確認索引更新位置,當併發量很大時,將會發生此等待。以下是在測試環境中所做的測試。

創建測試表t2

create table t2(c1 number,c2number,c3 number);

創建多個索引,以方便模擬等待事件的發生,同時制定pctfree值爲0 ,這樣索引更容易發生分裂

create index ind_t2_c1 on t2(c1) pctfree 0;

create index ind_t2_c2 on t2(c2)pctfree 0;

create index ind_t2_c3 on t2(c3)pctfree 0;

create index ind_t2_c1c2 on t2(c1,c2)pctfree 0;

create index ind_t2_c1c2c3 on t2(c1,c2,c3)pctfree 0;

初始化數據插入

begin

for i in 1..1000000  

loop

insert into t1 values(i,i+1,i+2);

end loop;

commit;

end;

/

然後我們打開10046 會話跟蹤,

alter session set events '10046 trace namecontext forever,level 12';

往表中插入大量數據

begin

for i in 50000..200000  

loop

insert into t1 values(i,i+1,i+2);

end loop;

commit;

end;

/


待插入完成後,關閉10046

alter session setevents '10046 trace name context  off';


查看trace文件

PARSING IN CURSOR #6len=97 dep=0 uid=90 oct=47 lid=90 tim=1387231767091421 hv=2257850176ad='36ebcc78' sqlid='3h55s3f3983u0'

begin

for i in 50000..200000

loop

insert into t1 values(i,i+1,i+2);

end loop;

commit;

end;

END OF STMT

PARSE#6:c=7000,e=6832,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1387231767091408

BINDS #6:

=====================

PARSING IN CURSOR #5len=41 dep=1 uid=90 oct=2 lid=90 tim=1387231767092758 hv=3483989809ad='3ce9466c' sqlid='d4pp1yg7ukxtj'

INSERT INTO T1 VALUES(:B1,:B1 +1,:B1 +2)

END OF STMT

PARSE#5:c=0,e=687,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=1387231767092747

BINDS #5:

Bind#0

 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00pre=00

 oacflg=03 fl2=206001 frm=00 csi=00 siz=72off=0

 kxsbbbfp=0057ffb8  bln=22 avl=02  flg=05

 value=50000

Bind#1

 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00pre=00

 oacflg=03 fl2=206001 frm=00 csi=00 siz=0off=24

 kxsbbbfp=0057ffd0  bln=22 avl=02  flg=01

 value=50000

Bind#2

 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00pre=00

 oacflg=03 fl2=206001 frm=00 csi=00 siz=0off=48

 kxsbbbfp=0057ffe8  bln=22 avl=02  flg=01

 value=50000

WAIT #5:nam='db file sequential read' ela= 23409 file#=4 block#=1799 blocks=1obj#=72576 tim=1387231767131489

WAIT #5:nam='db file sequential read' ela= 1103 file#=4 block#=1800 blocks=1 obj#=72576tim=1387231767134290

WAIT #5:nam='db file sequential read' ela= 21198 file#=14 block#=2689 blocks=1obj#=72583 tim=1387231767155970

WAIT #5:nam='db file sequential read' ela= 14040 file#=4 block#=1900 blocks=1obj#=72583 tim=1387231767170334

WAIT #5:nam='db file sequential read' ela= 19055 file#=14 block#=3280 blocks=1obj#=72584 tim=1387231767189656

WAIT #5:nam='db file sequential read' ela= 20841 file#=4 block#=2328 blocks=1obj#=72584 tim=1387231767210672

WAIT #5:nam='db file sequential read' ela= 17894 file#=14 block#=5377 blocks=1obj#=72585 tim=1387231767228877


從以上信息可以明顯看到'dbfile sequential read'等待,等待的信息爲:

file#=4 block#=1799blocks=1 obj#=72576

我們確認下obj#=72576,是什麼

orcl@ SCOTT>select  object_name,object_id fromdba_objects where object_id=72576;


OBJECT_NAME                     OBJECT_ID

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

IND_T1_C3                           72576


Elapsed: 00:00:00.12

orcl@ SCOTT>select  object_name,object_id fromdba_objects where object_id=72583;


OBJECT_NAME                     OBJECT_ID

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

IND_T1_C1C2                         72583


Elapsed: 00:00:00.03

orcl@ SCOTT>select  object_name,object_id fromdba_objects where object_id=72584;


OBJECT_NAME                     OBJECT_ID

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

IND_T1_C1C2C3                       72584


可以看到全都是索引。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章