事务队列等待深入分析:索引争用

发表于:2009-11-09 10:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
Oracle

  索引争用是和索引块分裂直接相关的。当一个事务需要向一个数据块插入数据时,该数据块正好发生了索引分裂,则插入事务需要等待分裂事务(注意:分裂事务不是用户事务,而是一个递归事务)。这一等待通常在高并发的OLTP系统中可见:

  HELLODBA.COM> create table tx_index_contention (a number, b varchar2(1446), c date);

  Table created.

  HELLODBA.COM> create index tx_index_contention_idx1 on tx_index_contention (c, b) tablespace idx_2k pctfree 10;

  Index created.

  --session 1,产生大量的索引块分裂:

  HELLODBA.COM> conn demo/demo

  Connected.

  HELLODBA.COM> begin

  2 for i in 1..2000

  3 loop

  4 insert into tx_index_contention (a, b, c) values (i, lpad('A', 1000, 'A'), sysdate);

  5 end loop;

  6 end;

  7 /

  --session 2,在索引分裂的同时,插入数据:

  HELLODBA.COM> conn demo/demo

  Connected.

  HELLODBA.COM> alter session set events '10046 trace name context forever, level 12';

  Session altered.

  HELLODBA.COM> begin

  2 for i in 1..1000

  3 loop

  4 insert into tx_index_contention (a, b, c) values (i, lpad('A', 20, 'A'), sysdate);

  5 end loop;

  6 end;

  7 /

  HELLODBA.COM> alter session set events '10046 trace name context off';

  Session altered.

  HELLODBA.COM> select sid, event, total_waits from v$session_event where sid in (select sid from v$mystat) and

  event = 'enq: TX - index contention';

  SID EVENT TOTAL_WAITS

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

  307 enq: TX - index contention 10

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号