TX锁是保护事务的,事务结束时便会释放。因此,为获得TX锁为等待的会话,要等到拥有锁的会话的事务结束为止。


  1. SQL> select name,parameter1,parameter2,parameter3 from v$event_name where name like '%enq: TX%';
  2. NAME PARAMETER1 PARAMETER2 PARAMETER3
  3. ------------------------------ --------------- --------------- ---------------
  4. enq: TX - row lock contention name|mode usn<<16 | slot sequence
  5. enq: TX - allocate ITL entry name|mode usn<<16 | slot sequence
  6. enq: TX - index contention name|mode usn<<16 | slot sequence
  7. enq: TX - contention name|mode usn<<16 | slot sequence

(1)欲修改特定行时,相关的等待事件是enq: TX - row lock contention。

修改相同行,是发生TX锁引起争用的最普遍的情况。TX锁保护的资源是“事务”。修改相同行伴随着的TX锁争用,完全是应用程序的问题。长时间执行的update或delete命令最好是在事务较少的时段执行。还有,优化update或delete命令本身也是改善性能的另一种方法。特别是对大量数据执行update,不仅引起TX锁争用,而且会引起许多性能问题。

代替大量执行的update的一种方法如下:
(1)创建一个复制既存表old_table的新表new_table,然后将修改内容存储。即利用“create table new_table as select * from old_table”之类的命令。
(2)在新创建的表new_table中,创建与old_table相同的索引等。
(3)对于既存表old_table执行drop,然后将新表new_table重命名为old_table。
执行以前工作时,若是同时使用nologging和Parallel选项,就可以将所愿的工作更快,而且可以在利用更少资源的前提下实行。

(2)欲修改特定行上唯一键(unique key)或主键(primary key)相应的列时,相关的等待事件是enq: TX - row lock contention。

发生唯一键或主键冲突时也会发生TX锁争用。唯一键冲突引起的TX锁争用完完全全是应用程序的问题。最好的解决方法就是使用sequence创建唯一键。

(3)欲修改的块的ITL上想要登记自身相应的事务条目时,相关的等待事件是enq: TX - allocate ITL entry。

所有事务在修改块之前,必须在块头的ITL上等级条目。

(4)欲修改已创建位图索引(bitmap index)的列值时,相关的等待事件是enq: TX - row lock contention。

位图索引是为了对那些读取频繁而写入工作较少的表,即将select语句性能最大限度的优化而考虑的。对于DML频繁的表,随意使用位图索引相当危险。每当行被修改时,都要计算位图值,因此DML本身的性能将下降。而且多个会话同时执行DML时,更是发生过多的TX锁争用。若对DML频繁的表想要保障sql语句的性能,与其使用位图索引,不如使用Materialized View之类的功能。

(5)索引叶节点上发生分割时,相关的等待事件是enq: TX - index contention。

(6)其它情况时,相关的等待事件是enq: TX - contention。

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树SQL高级技巧事务67266 人正在系统学习中

[转帖]事务上的等待事件 —— enq: TX - contention的更多相关文章

  1. 奇怪的等待事件“enq: ss - contention”

    数据库有时会遇到大量的进程发生'enq: ss - contention'等待,持续5到10分钟,然后自动消失.从字面上看,'SS'是Sort Segment: select * from v$loc ...

  2. 【故障处理】队列等待之enq IV - contention案例

    [故障处理]队列等待之enq IV -  contention案例 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

  3. 网络上的等待事件 —— SQL*Net message from client/dblink

    SQL*Net message from client SQL> select event#,name,parameter1,parameter2,parameter3 from v$event ...

  4. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

  5. ORACLE等待事件:read by other session

    read by other session简介 官方关于read by other session的介绍如下: When information is requested from the datab ...

  6. ORACLE AWR结合ASH诊断分析enq: TX - row lock contention

    公司用户反馈一系统在14:00~15:00(2016-08-16)这个时间段反应比较慢,于是生成了这个时间段的AWR报告, 如上所示,通过Elapsed Time和DB Time对比分析,可以看出在这 ...

  7. 【故障解决】enq: PS - contention

    [故障解决]enq: PS - contention 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能, ...

  8. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV -  contention) 1  BLOG文档结 ...

  9. RAC性能分析 - gc buffer busy acquire 等待事件

    概述---------------------gc buffer busy是RAC数据库中常见的等待事件,11g开始gc buffer  busy分为gc buffer busy acquire和gc ...

  10. 【等待事件】等待事件系列(5.1)--Enqueue(队列等待)

    [等待事件]等待事件系列(5.1)--Enqueue(队列等待)   1  BLOG文档结构图   2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可 ...

随机推荐

  1. mysql数据监控(db.odbc.select[])

    监控项 : db.odbc.select[<unique short description>,<dsn>]  #返回SQL查询结果的第一行的第一列中 Type 类型,选择监控 ...

  2. Netty 组件介绍

    BootStrap Netty 中的 BootStrap 分为两种:一种是客户端的 BootStrap:一种是服务端的 ServerBootStrap. 客户端的 BootStrap 初始化客户端,该 ...

  3. 未经授权访问 .js

    流程顺序:后台管理登陆地址 → 后台主页地址 → fuzz测试出用户管理列表接口 → 直接调接口..全程黑盒. 那么接下来我逆着来推理下逻辑: 首先是拿到某后台管理登录的网址 接着查看html源码,发 ...

  4. 使用Plist编辑器——简单入门指南

      本指南将介绍如何使用Plist编辑器.您将学习如何打开.编辑和保存plist文件,并了解plist文件的基本结构和用途.跟随这个简单的入门指南,您将掌握如何使用Plist编辑器轻松管理您的plis ...

  5. Plus版SBOM:流水线物料清单PBOM

    相信大家对软件物料清单(SBOM)并不陌生,它是指用于构建软件解决方案的所有软件组件(开源或商业)的列表.但在软件物料清单中,并不包括用于部署软件的微服务和其他组件.为了更全面了解所用的组件,我们需要 ...

  6. 渗透测试 vs 漏洞扫描:差异与不同

    渗透测试和漏洞扫描常常被混淆,这两者都通过探索系统来寻找 IT 基础架构中的弱点及易受攻击的地方.阅读本文,带你了解两者之间的差异与不同. 手动 vs 自动 渗透测试是一种手动安全评估方式,网络安全人 ...

  7. 火山引擎AB测试:企业产品优化主题分享在北京举办

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台在北京举办了"超话数据:企业产品优化分享"的活动.该活动邀请了火山引擎的 ...

  8. DataLeap的Catalog系统近实时消息同步能力优化

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 字节数据中台DataLeap的Data Catalog系统通过接收MQ中的近实时消息来同步部分元数据.Apa ...

  9. Axure 获取验证码

    拖两个矩形框,一个用来做文档输入,一个做获取验证码的按钮 设置全局变量OnLoadVariable的初如值为60 1.用例中的条件:当OnLoadVariable的值不等于0 2.用例中的步骤 禁用& ...

  10. Axure 自定义元件库

    点击文件 -> 新建元件库 可以添加多个元件,并将期重命名 保存元件库 新建页面 添加元件,选择自建的元件库 导入后就会发现我的原件库 这样就可以使用我们自定义的元件库了