单session下的cr块的产生

本文详细探讨了在Oracle数据库中,不同类型的DML操作(如Update、Insert、Delete和Insert select)如何影响CR块的产生。在无索引的全表扫描Update和Delete操作中,会观察到CR块的出现,而其他情况下如有索引的更新或插入,或者单纯的Select、Insert和Delete操作不会产生CR块。
摘要由CSDN通过智能技术生成
一.Update 无索引(全表扫描)
Select * from test;
1    TEST    xcur    12    34    6B568000
2    TEST    xcur    12    33    6B644000

Update test set name = ‘001’ where id > ‘000’;
1    TEST    xcur    12    34    6B484000
2    TEST    xcur    12    33    6B644000
3    TEST    cr        12    34    6B568000   ===> xcur-> cr
注意:此时表没有索引,执行的全表扫描的update


二.Update 有索引(索引扫描)
Create index ind_test on test(id);
Select * from test;
1    TEST    xcur    12    33    6B1B8000
2    TEST    xcur    12    34    6B3E0000

Update test set name = ‘001’ where id > ‘000’;
1    TEST    xcur    12    33    6B1B8000
2    TEST    xcur    12    34    6B3E0000

结论1,由此可见单独的select不会产生cr。在索引扫描情况下的update也不会产生cr。仅仅当全表扫描的update的时候才会产生cr。


三.Insert
Insert into test values (‘006,’’sunwg’);
1    TEST    xcur    12    33    6B3C8000
2    TEST    xcur    12    34    6BFA6000

结论2,在insert的时候不会产生cr,所有块均为当前块xcur。


四.Delete无索引(全表扫描)
Select * from test;
1    TEST    xcur    12    33    6ADE4000
2    TEST    xcur    12    34    6BB76000
Delete from test where id > ‘001’;
1    TEST    xcur    12    33    6ADE4000
2    TEST    xcur    12    34    6BC12000
3    TEST    cr        12    34    6BB76000   ===> xcur-> cr


五.Delete有索引(索引扫描)
Select * from test;
1    TEST    xcur    12    34    6B2AC000
2    TEST    xcur    12    33    6BE40000
Delete from test where id > ‘001’;
1    TEST    xcur    12    34    6B2AC000
2    TEST    xcur    12    33    6BE40000

结论3,在索引扫描情况下的delete也不会产生cr。仅仅当全表扫描的delete的时候才会产生cr。


六.Insert select 无索引
Select * from test;
1    TEST    xcur    12    33    6B2AC000
2    TEST    xcur    12    34    6BD8A000
Insert into test select * from test;
1    TEST    xcur    12    33    6B2AC000
2    TEST    xcur    12    34    6BD8A000


七.Insert select 有索引
Select * from test;
1    TEST    xcur    12    33    6AF8C000
2    TEST    xcur    12    34    6BD56000
Insert into test select * from test;
1    TEST    xcur    12    33    6AF8C000
2    TEST    xcur    12    34    6BD56000

结论4,Insert select不会产生cr

附录:
Select o.object_name
,decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec'
,6,'irec',7,'write',8,'pi') state
, dbarfil, dbablk, ba
from x$bh b , dba_objects o
where b.obj = o.data_object_id
and b.ts# > 0
and o.object_name = 'TEST'
group by o.object_name, state, blsiz
, ba, dbarfil, dbablk


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值