当事务修改索引中的数据时,而相关索引块没有足够的空间的时候,就会发生索引块的分割,在分割的过程中前台进程需要等待分割完毕才能继续操作。
如果这个时候其他会话也要修改这个索引块的数据,那么将会出现索引块的竞争。
(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.索引的信息
索引分裂引发的enq: TX - index contention.
最新推荐文章于 2025-08-06 12:58:36 发布
本文介绍了在Oracle数据库中,当事务修改索引数据且索引块空间不足时,会发生索引块分裂,可能导致enq: TX - index contention等待事件。通过创建测试表和插入数据,分析了索引块分裂的过程和影响,并展示了并发插入时的等待事件,强调在高并发场景下,索引分裂可能带来的性能问题。
订阅专栏 解锁全文
261

被折叠的 条评论
为什么被折叠?



