深入剖析:update pk会发生什么?

张大朋(Lunar)Oracle 资深技术专家

Lunar 拥有超过十年的 ORACLE SUPPORT 从业经验,曾经服务于ORACLE ACS部门,现就职于 ORACLE Sales Consultant 部门,负责的产品主要是 Exadata,Golden Gate,Database 等。

前文回顾:insert 的enq: TM – contention

结论:

对存在pk的表来说,无论有没有子表,update pk的操作会同时阻塞对该表做insert操作中那些pk跟update语句更改前、后两个值相关的会话。

测试六

测试一下子表无事务的情况下,对父表的update是如何影响父表的delete和insert的 首先,我们在Session 4(SID 116)对做commit,此时session 2(SID 220)会自动解锁,并报出来应有的违反约束的错误ORA-02292:

Session 4:

现在,我们把所有的会话都做commit或者rollback,然后观察对父表的updae会不会对父表的其他DML操作有影响:

Session 2(SID 220):

Session 4(SID 116):

Session 5(SID 222):

Session 3观察:

这里看见session 4对父表的delete不受session 2在父表的update的影响,而session 5对父表的insert 会被session 2在父表的update阻塞,被阻塞的对父表的insert操作等待事件为:enq: TX – row lock contention

在测试一次:把上面所有会话都commit或者rollback,然后:

Session 2(SID 220):

Session 4(SID 116):

这里我们看到,对父表的update阻塞了对其他会话对父表insert时pk的值=updae父表的pk的值的会话。 这个我们可以再做一个测试:

测试7,新建两个表,一个有pk,一个无pk,然后做同样的update和insert操作:

无pk的表:

这测试不会有任何问题。

现在我们改为带有pk的表:

SESSION 1:

SESSION 2:

也就是说,对存在pk的表来说,无论有没有子表,update pk的操作会同时阻塞对该表做insert操作中那些pk跟update语句更改前、后两个值相关的会话 比如update LUNAR2 set deptno =3 WHERE DEPTNO=2,就会阻塞所有insert deptno=2和deptno=3的会话

至此,你是不是对enq: TM – contention的等待事件了解更深了呢

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏landv

SQLSERVER异机备份

1793
来自专栏杨建荣的学习笔记

数据库负载急剧提高的应急处理(二) (r9笔记第55天)

对于之前碰到的一个数据库负载急剧提升的问题,做了应急处理之后,我们需要再冷静下来,来看看是哪些地方出现了问题,还需要哪些改进。 首先第一个问题就是为什么会突然负...

3364
来自专栏用户画像

mysql模拟题三

  9、找回mysql服务器root密码的很重要的一步是跳过权限表的检查启动mysql,该命令是(D)(2分)

1322
来自专栏杨建荣的学习笔记

增量数据丢失的原因分析(r8笔记第26天)

今天开发的同事找到我,让我帮他们补一部分数据,因为有一个表的数据已经快一个月没有增量数据了,这个需求听起来有些奇怪是不? 问题的背景是在统计库中存在一个表,供部...

3198
来自专栏杨建荣的学习笔记

关于降低高水位线的尝试(r3笔记47天)

在前一段时间,生产环境中有几个很大的分区表,由于存在太多的碎片,导致表里的数据就几十条,但是查询的时候特别慢。很明显是高水位线导致的问题。 一般来说这类问题,使...

3456
来自专栏杨建荣的学习笔记

关于enq: TX - allocate ITL entry的问题分析(r3笔记第66天)

今天发现系统在下午1点左右的时候负载比较高,就抓取了一个最新的awr报告. Snap IdSnap TimeSessionsCursors/SessionB...

3836
来自专栏Hadoop数据仓库

配置 Oracle 透明网关访问 SQL Server

试验环境: OS:XP Oracle 10.1 SQLSERVER2000 HOSTNAME:home-30b98e1e20 都使用 tcp/ip 默认端口 ...

2347
来自专栏杨建荣的学习笔记

关于db link权限分配的苦旅(二)(r7笔记第45天)

在几天前说过关于db link分配权限的问题,当时也折磨了我好一会儿 关于db link权限分配的苦旅(一) (r7笔记第42天) ? 大体的情况还是在11...

3354
来自专栏杨建荣的学习笔记

物化视图中的统计信息导致的查询问题分析和修复 (r7笔记第47天)

今天开发的同事下午反馈给我一个问题,说有操作直接卡住了,听这个描述,感觉很可能是查询慢了。 于是连接到环境中,查看了一下正在执行的sql语句情况,发现下面的语句...

3515
来自专栏杨建荣的学习笔记

分分钟搭建MySQL Group Replication测试环境(二)(r12笔记第41天)

之前总结过一篇,分分钟搭建MySQL Group Replication测试环境(r11笔记第82天),但是有一个地方还有待改善,那就是那个脚本仅仅支持s...

3827

扫码关注云+社区

领取腾讯云代金券