首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

enq: TM - contention锁的解决

这两天生产上碰见个表锁的问题,现象就是04:00夜维一启动,应用就开始处理缓慢,AWR看,enq: TM - contention等待事件占比超过了97%, ?...contention,一般是执行DML期间,为防止对与DML相关的对象进行修改,执行DML的进程必须对该表获得TM锁,就可能产生enq: TM - contention等待事件,若在获得TM锁的过程中发生...这三个会话操作,都可以正常执行,而且不会出现任何,因此,存在主外键约束,就需要为外键创建索引,否则在并发DML中就会出现锁,进而对应用产生影响, ?...可以下面语句, SQL> SELECT * FROM (SELECT c.table_name, cc.column_name, cc.position column_positionFROM...外键supplier_id没索引,因此,夜维删除主表的操作,就会对子表加锁,和应用中删除子表操作之间,就会存在TM锁。 为supplier_id这个外键字段,创建单键值索引,即可解决这问题。

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

DBLINK分布式事务失败又遭遇RAC热点块

编辑手记:在DBLINK中由于远端数据库无法正常执行分布式事务,又遭遇RAC热块,两者共同作用导致数据库严重故障。接下来我们从AWR报告分析入手,一步步分析并解决问题。...---此处省略大量类似输出 同时从awr中同样可以看到问题时段gc最为严重的为订单表中的索引IDX_ORDER_LIST_OLNBR_1,该索引为右向增长的数值索引,近一半的gc发生在该索引上。...如无法进行应用改造,可以针对热点表改造为hash或range hash方式分区表并针对具有右向增长性质的字段创建local索引,该种解决方案对应用透明,将热点表及索引使用hash算法将数据分散在多个段中,缓解热点块...,其目的就是打散这些集中访问的数据块,减少数据块被多数会话同时访问的频率,从而分散热点块的。...(3)如无法进行分区表改造,至少需要对热点表中具有右向增长性质的索引,如主键、日期类型及数值自增长类型字段通过hash方式创建全局分区索引,缓解热点块,同理,其目的也是打散这些集中访问的数据块,特别是右向增长的索引热点永远在最右端

1K50

高并发索引问题解决方法探讨

对于sequence 生成的主键索引,高并发时会出现严重的用情况,下面AWR的前TOP4 等待事件,都是index contention相关的等待事件,非常严重: 为什么高并发会产生索引?...索引一般在字段值顺序递增的情况下表现最为严重,比如上面的由sequence生成的主键索引,因为索引值需要顺序存放,多个并发session都在一个index block,导致buffer busy...为什么data block没有那么严重的? data block没有顺序存放的要求,ASSM管理的表空间,多个session 可以插入数据到不同的 block。...有很多文章介绍过索引的解决方法,大致如下: 1、反向键索引 2、将索引进行hash分区 3、增大PCTFREE 上面几种方法都有一些缺点(下面还有性能对比图): 反向键索引:表相对小的时候性能尚可,...增大PCTFREE值:会占用更多的存储空间,更重要的是会占用更多的buffer cache内存,而且对缓解索引的效果一般。

60520

经典故障分析 - ASSM引发的索引与 enq HW -contention 等待事件

如果大量数据被并发插入某个对象时,那多个进程可能会试图在高水位线以上同时申请可用空间,大并发的申请HW锁,从而导致HW enqueue。...从p1,p2,p3参数中发现P3值并不代表块的RDBA(data block address)(36730这个值太小了,这是为啥?先思考下)。 ?...既然P3找不到RDBA,那就从ash中字段CURRENT_FILE#和CURRENT_BLOCK#上寻找块: ? ?...所以问题原因主要是多个进程同时修改索引段头上的HWM而导致的,针对这种问题一般采用HASH分区索引,通过将索引改造成HASH分区索引来缓解索引段头的,这样从原来的在单个段头修改HWM,到现在的在多个分区索引的段头上修改...4 故障解决 问题原因主要是多个进程同时修改索引段头上的HWM而导致的,针对这种问题一般采用HASH分区索引,通过将索引改造成HASH分区索引来缓解索引段头的,这样从原来的在单个段头修改HWM,

99740

自旋锁与(1)

并根据个人的查资料以及理解的经历,给各位想更深入理解的人分享一些个人的资料 自旋锁与 1....首先我们来明确一个概念,(contention):多线程同一资源,这里指的是锁。高指的是大量线程竞争同一个锁,低则指的是相反的情况。...如果一个线程通过这个完整过程但是获取锁失败,其他线程获取到了这个锁,那么很可能这个锁面临着高的情况。试图获取一个高的资源,是应该避免的操作。...相反,如果让线程后退一段时间,不去锁,这样效率会更高。 线程再次重试之前应该后退多久呢?一种比较好的方式就是让后退的时间与重试的次数成正比,因为重试次数越多,高的可能性越高。

18730

编码篇-学会小宏和条件编译

但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是条件编译(不被编译的代码不会被运行) 条件编译语法格式 1、#if 编译预处理中的条件命令, 相当于C语法中的...#if 条件1 ...code1... #elif 条件2 ...code2... #else ...code3......*************** #ifdef 标识符 // 如果定义了 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一般是#...if的条件,不要还没运行,就先用源程序里面的变量作为条件进行判断,变量是运行时才产生的,而条件编译呢是在运行之前编译的。...所以条件编译的条件一般是利用宏定义,因为宏定义和条件编译都是编译之前进行的。

73220

antlr解析odata filter条件表达式

这篇文章分享如何用antlr解析odata filter条件表达式。...其实,状态机在很多其它地方也有用途,比如:订单的状态变化,其实就可以状态机来定义。...除了上面提到的场景,还有两个我们平时经常碰到的场景:json解析和html在线编辑器,它们都可以antlr来实现。...具体odata filter条件表达式的定义可以参考odata官方文档,这里为了描述问题方便,简化基本规则如下: 最小的表达式符合模式 key operator value 表达式和表达式可以逻辑运算符连接成一个新的表达式...其实,我们可以看到odata filter条件表达式和计算器的算术表达式有些类似,它们都是非常典型的词法分析和语法分析案例,所以同样可以采用antlr来解析。

3K10

白盒测试 | 例设计方法之条件覆盖

条件覆盖,程序各判定中的每个条件获得各种可能的取值至少满足一次即可,不考虑路径的覆盖。...上图中有两个判定表达式,每个判定表达式中有两个条件,为了做到条件覆盖,第一个判断的所有条件的可能取值情况是A>1或A≤1,B=0或B!=0。第二个判断的所有条件可能的取值情况是A=2或A!...=2和X<=1的条件,执行路径abd 方法二: 1、A=1,B=0,X=3;满足A≤1,B=0,A!=2和X>1的条件,执行路径 abe 2、A=2,B=1,X=1 ;满足A>1,B!...=0,A=2和X≤1的条件,执行路径 abe 缺点:条件覆盖并不一定总能覆盖全部分支。测试用例虽然满足了条件覆盖准则,但是只涵盖了程序的路径abe。...但是,条件覆盖还是要比判定覆盖强一些,因为条件覆盖可能会使判断中各个条件的结果都取“真”或着取“假”,而判定覆盖却做不到这一点。

1K20
领券