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. Numpy计算近邻表时间对比

    技术背景 所谓的近邻表求解,就是给定N个原子的体系,找出满足cutoff要求的每一对原子.在前面的几篇博客中,我们分别介绍过CUDA近邻表计算与JAX-MD关于格点法求解近邻表的实现.虽然我们从理论上 ...

  2. 【Tinyui】极简跨平台桌面端小工具开发框架

    导航 Github Gitee 开发指南 用户手册 说明 在产品或项目工作中,可能会遇到需要给非开发人员或者客户提供简易的PC小工具,这些小工具通常用户交互比较简单:功能也不复杂:同时需要支持多平台以 ...

  3. react-native在windows环境搭建并使用脚手架新建工程

    截止到2024-1-11,使用的主要软件的版本如下: 软件实体 版本 react-native 0.73.1 react 18.2.0 react-native-cli 2.0.1 Android S ...

  4. Java 打印Excel工作表

    示例要点 本文介绍如何通过Java程序打印Excel工作表.可通过以下方法打印: 默认打印机打印 指定打印机打印 程序环境 spire.xls.jar JDK版本要求1.6.0及以上的高版本 IDEA ...

  5. 实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题

    摘要:目前复杂问题包括两种:含约束的问题和多跳关系问题.本文对ACL2020 KBQA 基于查询图生成的方法来回答多跳复杂问题这一论文工作进行了解读,并对相关实验进行了复现. 1.摘要 1.1 复杂问 ...

  6. OpenCV萌新福音:易上手的数字识别实践案例

    摘要:信用卡识别的案例用到了图像处理的一些基本操作,对刚上手CV的人来说还是比较友好的. 本文分享自华为云社区<Python openCV案例:信用卡数字识别>,原文作者:深蓝的回音 . ...

  7. Python中Round函数:怎么解释?怎么用?

    摘要:在本文中,介绍了什么是round函数以及如何从python内核中实现它.同时,还介绍舍入函数的一些缺点,以及如何纠正它们,如何在数据科学中广泛使用的库中发挥作用. Python中的舍入函数,返回 ...

  8. Flask依赖的核心模块werkzeug

    Flask的web框架实现 Flask是python Web框架,自然要遵 WSGI 规范,需要同时实现服务端程序+应用程序,并且要丰富完善请求和响应的处理. Flask自身并没有实现WSGI,而是依 ...

  9. Open vSwitch系列之十 调用北向接口下发流表

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  10. Spring Cloud整体架构解析

    Spring Cloud整体架构 Spring Cloud的中文名我们就暂且称呼它为"春云"吧,听上去是多么朴实无华的名字,不过呢一般名字起的低调的都是厉害角色,我们就看看Spri ...