一、TS
Oracle的Enqueue事件是一个重要的数据库性能诊断工具,可以帮助用户诊断排他锁、行锁和对象锁等多种不同类型的锁,以确保锁之间的协调请求和实施运行时。通常用于表空间及临时分段(TS)之间的事务操作,保证Oracle数据库中多个用户之间数据交换的安全性和一致性。
Enqueues(TS)主要应用于表空间及临时分段操作,用于实现并发控制。每个表空间及临时分段都会以共享的资源方式存在,这些资源通常被多个用户共享,不同的用户在访问资源时需要采取控制措施,这就是Enqueues(TS)进行控制的地方。Enqueue(TS)使用消息队列,他可以记录多个并发访问者,并用来确认他们的事务操作,并根据需要进行等待和控制,以防止事务操作之间的冲突。此外,当有事务需要更新表空间或临时分段时,Enqueue(TS)也可以在此时起到类似的作用,以保护正在进行的操作以及之后的操作。
因此,Enqueues(TS)在Oracle数据库中是保证事务安全性、一致性及并发控制的重要手段,可以有效减少数据库层事务间内部的冲突,保证用户对数据库操作的安全性和正确性。当出现TS问题时,启用Oracle事件enqueue(TS)可以追踪并解决系统性能问题。
二、TT
TT 队列锁在官方文档中介绍为TT, Temporary Table,但是实际在版本8i之后该队列锁更多参与在表空间管理事务中。也可以称enqueue TT为tablespace lock。
作用 该enqueue TT队列锁用以在各种类型的表空间操作执行过程中避免出现死锁dead lock。 该enqueue lock的 ID2表明正在执行的操作种类,ID1表明该操作对应的表空间号V$Tablespace.TS#。 ID1/ ID2的含义 id1是tablespace number V$Tablespace.TS#,ID2表明执行中的操作类型。以下是操作类型对应代码;
0- 用以避免在drop tablespace和创建rollback segment之间发生死锁
1- 用以串行化在给定表空间上创建数据文件
2- 用以避免在TSPITR tablespace point in time recovery期间发生其他类型操作
4- 用以在创建tablespace时锁住该tablespace id
8- 用以避免在ALTER TABLESPACE期间发生死锁
16- 即16进制的0x10,用以同步 分配和回收盘区,allocation and deallocation of extents.
32+ 用在增加数据文件add datafile和创建表空间时,其中ID2为 32(十进制的)+相对文件号relative file number
三、TM
TM Enqueue (DML Enqueue)是再执行DML操作修改表时由事务获取的。DML操作需要表锁,以防止与事务发生冲突的同时DDL操作。
当应用程序具有引用完整性并试图修改子/父表时,当外键上没有索引时,Oracle将在父/子表上获得额外的锁定。因此,建议为数据库中定义的所有外键添加索引。
TM锁上等待的最常见原因往往涉及外键约束,其中受约束的列没有被索引。Oracle还会等待TM锁,直到它被授予或请求超时或TM锁发生死锁检测。
临时解决方案:与业务人员确认后 kill update t02_account 表的那条会话。
enq:TM-contention等待的发生,发生TM锁争用的情况如下:
1. 修改无索引外键(foreign key)的父键时
2 . DML与DDL之间的TM争用
3. LOCK TABLE 引起的TM锁争用
4. direct load工作引起的TM锁争用
四、TX
enq:TX-index contention是一个非常常见的等待事件,其专指由于索引分裂产生的竞争等待。
最常见的索引竞争一般发生在主键索引上,主键值从序列(sequence)中获取,每个事务都会生成一条新的记录,每条记录都要获得一个新的序列号,因为从sequence中取出的值是单向递增的,当索引中插入数据,并且维护索引结构的时候,不得不一直走向索引的最右侧的分支,对于每一个操作,都会想要维护索引中最右边的叶节点,那么所有的操作都会关注同一个内存块,希望能够维护这块内存,这就是一种典型的竞争形式。但在同一时间,只有一个人能够修改这块内存,因此当有一个人在修改的时候,其他所有想修改的人只能处于等待状态。
发生TX锁的原因:
1、不同session更新或删除同一个记录;
2、唯一索引有重复索引
3、位图索引多次更新
4、同时对一个数据块更新
5、等待索引块分裂
关于P1、P2、P3的说明:
P1---与等待相关的数据文件的全部文件数量
P2---P1中的数据文件的块数量
P3---描述等待产生原因的代码




