几种典型的因bitmap index 阻塞的场景

本文通过五个案例展示了在Oracle数据库中,更新、插入和删除操作如何影响到Bitmap索引,并导致事务间的阻塞现象。实验涵盖了不同场景下Bitmap索引的阻塞特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出差期间,其实很累了,坚持发一个吧~ 算不上深入,但总算是记录没有间断。

 

这是一个典型的问题,TOM在他的书中提到了关于bitmap index对于系统并发性能的影响。

普通的TX 的阻塞,没有那么抽象,比较容易理解。

但是bitmap index呢?

这里在三个会话之间简单测试一下几种典型的因bitmap index 阻塞的场景。

 

/*准备工作,并开启3个会话*/
create table table1
(id number,
 Fname varchar(20),
 sex   varchar(2));

alter table table1 add constraint pk_table1 primary key (id)
create bitmap index indx_sex on table1 (sex);

insert into table1 values (1,'aaa','a');
insert into table1 values (2,'bbb','b');
insert into table1 values (3,'ccc','a');
commit
select * from table1


/*CASE1    开始验证update bitmap列会引起bitmap阻塞*/
/*session 1*/
update table1 set sex='b' where id=1

/*session 2*/
update table1 set sex='b' where id=3   --被阻塞

/*session 3 sysdba查看阻塞信息*/
select * from dba_waiters;
select * from v$transaction;

 


/*CASE2    开始验证update 非bitmap列不会引起bitmap阻塞*/
/*session 1*/
update table1 set Fname='uuu' where id=1

/*session 2*/
update table1 set sex='b' where id=3  --不被阻塞

 


/*CASE3    开始验证insert 并含已有bitmap值会引起bitmap阻塞*/
/*session 1*/
insert into table1 values (4,'ddd','a');

/*session 2*/
update table1 set sex='b' where id=3  --被阻塞

/*session 3 sysdba查看阻塞信息*/
select * from dba_waiters;
select * from v$transaction;

 

/*CASE4   开始验证insert 不含有现有bitmap值,则不会引起bitmap阻塞*/
/*session 1*/
insert into table1 values (4,'ddd','c');

/*session 2*/
update table1 set sex='b' where id=3  --不被阻塞

 

/*CASE5    开始验证delete 会引起bitmap阻塞*/
/*session 1*/
delete from table1 where id=1;

/*session 2*/
update table1 set sex='b' where id=3  --被阻塞

/*session 3 sysdba查看阻塞信息*/
select * from dba_waiters;
select * from v$transaction;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值