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. MongoDB经典故障系列六:CPU利用率太高怎么办?

    每逢电商大促,全民狂欢,但热闹是属于疯狂剁手的人们.而开发者们有的缺是"高流量.高访问.高并发"三高下带来的种种问题.为了应对大促期间的高I/O情况,企业会选择MongoDB云数据 ...

  2. Tarjan:这个算法大神

    摘要:图的算法是进行静态分析的基础数据算法,如何提高图的分析效率,就需要对图的算法有进一步的认识. 1. 引言 在静态分析技术中, 我们常用会将代码转成抽象语法树(AST), 然后采用深度遍历(DFS ...

  3. GaussDB(for Redis)揭秘:Redis存算分离架构最全解析

    前言: 本文根据华为云NoSQL数据库架构师余汶龙,在今年的中国系统架构师大会SACC上的演讲整理而成,内容如下. 本次分享的大纲分成如下四个部分: 什么是GaussDB(for Redis)? 为什 ...

  4. 探索开源工作流引擎Azkaban在MRS中的实践

    摘要:本文主要介绍如何在华为云上从0-1搭建azkaban并指导用户如何提交作业至MRS. 本文分享自华为云社区<开源工作流引擎Azkaban在MRS中的实践>,作者:啊喔YeYe. 环境 ...

  5. MyBatis batchInsert 批量插入数据

    mybatis 是一个 Java 的持久层框架,它支持定制化 SQL.存储过程以及高级映射.通过 MyBatis,开发者可以直接编写原生态 SQL,避免了 JDBC 代码的繁琐. 如何在 MyBati ...

  6. 初探: 通过pyo3用rust为python写扩展加速

    众所周知,python性能比较差,尤其在计算密集型的任务当中,所以机器学习领域的算法开发,大多是将python做胶水来用,他们会在项目中写大量的C/C++代码然后编译为so动态文件供python加载使 ...

  7. EXECL函数

    1 COUNTIF 对比两列数据,有相同的即计为1 找一列空白列,输入=COUNTIF(范围,条件),按回车,然后再点击表格右下角的"+" 就可以拉动持续执行这个函数 2 CONC ...

  8. 微信公众号短链实时阅读量、点赞数爬虫(不会Hook可用)

    众所周知,微信分享的公众号分享出的一般都是短链,在这个锻炼下使用浏览器打开并不能获取微信公众的阅读量点赞数等这些信息,如图1所示. 但是实际拥有详细信息的则是这个链接下面,提取链接所需要提交的信息包括 ...

  9. 【库函数】Qt中Json的操作

    参考博客: https://blog.csdn.net/hp_cpp/article/details/80338116 从文件中读取json https://www.cnblogs.com/ybqjy ...

  10. Google C++编程规范(Google C++ Style Guide)

    参考链接: Google 代码规范 C++总结 Google 开源项目风格指南--中文版 Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比较全面的说明图,可以在短 ...