关于Bitmap index冲突引起的TX锁争用

*Tree索引的叶节点以排序形式存储索引条目,每个索引条目指向各自的一个Rowid,所以唯一键冲突外,索引条目之间不发生争用。
而Bitmap index的叶子节点具有‘Column+Start rowid+End rowid+bitmap’的结构。所以,一个叶节点管理大范围的Rowid。当建有
[@more@]
Bitmap index的表被修改时,对位图索引相应的列值每次都要重新计算行所属叶子节点的位图。因而,如果两个会话同时对相同的叶节点
执行位图运算时,为了保障顺序,要获取TX锁。
如果特定会话以Exclusive模式获得TX锁后,执行了位图运算,但没有commit,则其它会话以Shared模式获取TX锁而等待,直到位图运算结束。
因为一个叶节点管理大范围的Rowid,所以可能大量出现TX锁争用。
下面做个测试验证一下:
Session A(SID 143):
SQL> create table test(n1 char(1000),n2 char(1000),n3 char(1000));
Table created.
SQL> create bitmap index bitmap_test on test(n1,n2,n3);
Index created.
SQL> insert into test values('a','b','c');
1 row created.
Session B(SID 127):
SQL> insert into test values('a','b','c');
...
Wait
Session C:
SQL> select*from v$lock where sid in(143,127) and type='TX';
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
32B679A0 32B679CC 127 TX 786443 250 0 4 182 0
3188B510 3188B550 127 TX 196628 1340 6 0 193 0
31895520 31895560 143 TX 786443 250 6 0 237 1
Session A以Exclusive模式获取一个TX锁(ID1=786443,ID2=440).最后执行insert的Session B会话以Exclusive模式
已获得另一个TX锁(ID1=786443,ID2=440),而且为了以Sshared模式获取Session A上TX锁,正在等待。
SQL> select (sysdate-a.logon_time)*24*60 minutes,
2 a.BLOCKING_SESSION,
3 a.sid,
4 a.serial#,
5 a.event,
6 a.p1,
7 a.p2,
8 a.p3
10 from v$session a, v$sql b
11 where
12 a.sql_address = b.address
13 and a.sql_hash_value = b.hash_value
14 and a.sql_child_number=b.child_number
15 and a.username like 'SH'
16 order by 1 desc;
MINUTES BLOCKING_SESSION SID SERIAL# EVENT P1 P2 P3
---------- ---------------- ---------- ---------- ------------------------- ---------- ---------- ----------
7.6333333 143 127 639 enq: TX - row lock conten 1415053316 786443 250
tion
所以,Bitmap index是为了那些读取频繁而写入工作较少的表,比如DSS系统,OLAP系统的select语句性能最大滴优化而考虑的。
对于DML频繁的表,建立Bitmap index是错误滴。我们常看到某些书上写着应该在唯一值很少的列上建立Bitmap index,这个说法
也要看环境,这个列是否更新频繁,如果此列的唯一值数量很少,比如性别。但是更新频繁那将是噩梦,因为值很少,DML操作将引发
很多的TX contention。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25586587/viewspace-1053998/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25586587/viewspace-1053998/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值