索引分裂引发的enq: TX - index contention.

87 篇文章 34 订阅 ¥39.90 ¥99.00
本文介绍了在Oracle数据库中,当事务修改索引数据且索引块空间不足时,会发生索引块分裂,可能导致enq: TX - index contention等待事件。通过创建测试表和插入数据,分析了索引块分裂的过程和影响,并展示了并发插入时的等待事件,强调在高并发场景下,索引分裂可能带来的性能问题。
摘要由CSDN通过智能技术生成
 当事务修改索引中的数据时,而相关索引块没有足够的空间的时候,就会发生索引块的分割,在分割的过程中前台进程需要等待分割完毕才能继续操作。

如果这个时候其他会话也要修改这个索引块的数据,那么将会出现索引块的竞争。
(end: TX- index contention).一般索引块的分割持有资源和释放非常短,并不会对数据库造成严重的影响。但是对表操作并发量很大的情况下可能导致严重的竞争。

1.创建测试表
SQL> CREATE TABLE TEST(ID INT,NAME VARCHAR2(50),CREATED DATE);
表已创建。

SQL> BEGIN
2 FOR I IN 10000..20000 LOOP
3 INSERT INTO TEST
4 VALUES(I,RPAD(I,50,'X'),SYSDATE);
5 END LOOP;
6 END;
7 /
PL/SQL 过程已成功完成。
SQL> COMMIT;
提交完成。

SQL> SELECT COUNT(1) FROM TEST;

  COUNT(1)
----------
     10001

SQL> CREATE INDEX IDX_TEST_01 ON TEST(ID,NAME) PCTFREE 0;

首先创建了一个测试表TEST,并向里面插入了10001 条记录,ID 最小是10000,最大
是20000。

然后再TEST 的ID,NAME 列上创建了升序索引。此时索引中的数据将会先按照ID 排

序,再按照NAME 列排序。注意我将PCTFREE 设置为0。这将会导致叶子节点块的空间都
填满了,当然B 树索引的最右边的叶子块除外(可能填满也可能没填满)。准备工作完成。

2.索引的信息
首先我们分析一下这个索引的情况。
SQL> ANALYZE INDEX IDX_TEST_01 VALIDATE STRUCTURE;
索引已分析


SQL> SELECT HEIGHT,BLOCKS,NAME,LF_ROWS,LF_BLKS,PCT_USED FROM INDEX_STATS;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值