zz如何解决enq: TX index contention

2024年 5月 31日 85.0k 0

1,enq: TX- index contention等待事件的概念
2,如何产生此等待事件
3,如何解决等待事件
4,小结
.

1,enq: TX- index contention等待事件的概念
1,当在基于索引的表中插入一条记录时,此时正好另一会话事务正在操作这个索引块正处于分裂状态(即索引块分裂)

2,如何产生此等待事件

--构造等待事件 enq: TX- index contention,如高并发引发此事件
--并发job
declare
v_job pls_integer;
begin
for i in 1..100 loop
dbms_job.submit(v_job,what => 'proc_arg;',next_date => sysdate,interval=>'sysdate+1');
commit;
end loop;
end;
/

--并发job调用的存储过程
create or replace procedure proc_arg
as
begin
insert into t_detail values(1);
--dbms_lock.sleep(120);
--commit;
end;

--查询是否发生了enq: TX- index contention事件
--先温习下v$session_wait视图几个重要列的含义:
1,WAIT_TIME_MICRO,
1,单位为毫秒
2,如当前会话处于等待,则为已等待占用的时间
3,如当前会话已停止等待,则为最近一次等待占用的时间
2,TIME_REMAINING_MICRO
1,本参数有几类值
2,若值>0,则表示还要等待多久时间
若值=0,则表示当前会话已超时
若值=-1,则表示不知还要等待多久
若值=null,表示当前会话未处于等待状态

--由下可知,不知还要等多久
SQL> select event,WAIT_TIME_MICRO,TIME_REMAINING_MICRO from v$session_wait where event like '%enq: TX - index contention%';

3,如何解决等待事件
  1,重构索引,建立反向键索引
  2,增大索引的pctfree

https://blog.csdn.net/lihuarongaini/article/details/101402146

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论