ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 位图索引影响并发性的原因

位图索引影响并发性的原因

原创 Linux操作系统 作者:tyoodz 时间:2011-06-07 19:37:49 0 删除 编辑


位图索引在读密集的环境中能很好的工作,但是在写密集的环境不是非常出色,原因很明确:一个位图索引键条目指向多行。即一个会话更改了索引键指向的一条数据,那么在这个索引键的其它行也会被锁,可做一下实验。

先建立一个位图索引

create bitmap index bitmap_emp_job on emp(job);

在scott下的emp表job列建立。

session one:

naruto@ORCL>select empno,job from scott.emp order by job;

     EMPNO JOB
---------- ---------
      7788 ANALYST
      7902 ANALYST
      7934 CLERK
      7900 CLERK
      7369 CLERK
      7876 CLERK
      7698 MANAGER
      7566 MANAGER
      7782 MANAGER
      7839 PRESIDENT
      7844 SALESMAN
      7654 SALESMAN
      7521 SALESMAN
      7499 SALESMAN

已选择14行。

naruto@ORCL>delete from scott.emp where empno = 7788;

已删除 1 行。


另一个会话
session two:

scott@ORCL>delete from emp where empno = 7902;
不是一条数据,但是这个会话还是被堵塞了,原因就是这两条数据被同一条索引键所指向(job均为ANALYST),会话一的delete语句锁住了这条索引键的全部行。

回滚两个会话。

对job列进行更新还会影响到两个索引键,进行如下实验:

session one:
naruto@ORCL>select empno,job from scott.emp order by job;

     EMPNO JOB
---------- ---------
      7788 ANALYST
      7902 ANALYST
      7934 CLERK
      7900 CLERK
      7369 CLERK
      7876 CLERK
      7698 MANAGER
      7566 MANAGER
      7782 MANAGER
      7839 PRESIDENT
      7844 SALESMAN
      7654 SALESMAN
      7521 SALESMAN
      7499 SALESMAN

已选择14行。
naruto@ORCL>update scott.emp set job = 'CLERK' where empno = 7788;

已更新 1 行。

sesion two:
scott@ORCL>delete from emp where job = 'CLERK';

会话2被锁住,原因很简单,会话1的update语句锁住了两个索引键(ANALYST、CLERK)中的全部行。

 

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

请登录后发表评论 登录
全部评论

注册时间:2011-05-16

  • 博文量
    55
  • 访问量
    75088