注册
DM和Oracle锁对比和分析
专栏/写意人生/ 文章详情 /

DM和Oracle锁对比和分析

写意人生 2024/06/30 1208 5 0
摘要 在事务管理方面,DM和Oracle数据库系统都有一套自己的锁管理机制,通过对比分析了解锁的相似点与不同点。

一、锁模式对比

DM和Oracle都是典型的关系型数据库系统,严格遵守数据库的ACID特性。在事务隔离级别,默认都是读提交(Read Committed)。
在事务管理方面,两个数据库系统都有一套自己的锁管理机制。以下所有的测试,以DM8和Oracle11.2版本数据库为例,不同数据库版本,在事务的锁管理方面会有一些差异。

1.1 DM和Oracle数据库锁模式说明

DM和Oracle数据库锁模式说明
image.png

image.png

从上表可以看出DM通过字母定义每个锁模式的含义,Oracle通过数字定义每个锁模式的含义,Oracle的锁模式定义比DM更复杂一些。DM通过V$LOCK视图中LMODE字段查看事务对象的锁级别,Oracle通过V$LOCKED_OBJECT视图中LOCKED_MODE字段查看事务对象的锁级别。

1.2 DM和Oracle数据库锁相关数据字典

(1)DM的V$LOCK数据字典字段信息如下:
ADDR:表示锁的内存地址;
TRX_ID:表示锁所属的事务ID;
LTYPE:表示锁的类型,可能是OBJECT(对象锁)或者TID(TID锁);
LMODE:表示锁的模式,可能的取值有S(共享锁)、X(排他锁)、IS(意向共享锁)、IX(意向排他锁);
BLOCKED:表示锁是否处于上锁等待状态,0表示已上锁成功,1表示处于上锁等待状态;TABLE_ID:对于对象锁,表示表对象或字典对象的ID,对于TID锁,表示封锁记录对应的表ID;
ROW_IDX:为TID锁封锁记录的行信息;
TID:为TID锁对象事务ID。
IGN_FLAG:锁对象的IGNORABLE标记,INI参数LOCK_DICT_OPT开启时有效。
取值0,表示锁正在使用中取值1,表示事务TRX1已经提交,但是锁资源未释放,TRX1重新封锁时可以直接使用其他事务TRX2封锁相同对象时可以忽略此IGN_FLAG=1的锁LOCK1,但是要设置LOCK1->IGN_FLAG=2,表示该锁TRX1不能直接使用,要释放后重新封锁。
HLCK_EP:关联对象HLCK所属节点号。DSC集群环境标识创建HLCK对象的节点号,默认为255,单机无效。

(2)Oracle的V$LOCKED_OBJECT视图字段信息如下:
XIDUSN:回滚段号
XIDSLOT:槽号
XIDSQN:序列号
OBJECT_ID:被锁对象ID
SESSION_ID:持有锁的sessionID
ORACLE_USERNAME:持有锁的Oracle用户名
OS_USER_NAME:持有锁的操作系统用户名
PROCESS:操作系统进程号
LOCKED_MODE:锁模式。

二、锁粒度对比

2.1 DM锁粒度

DM按照封锁对象的不同,锁可以分为TID锁和对象锁。通过V$LOCK视图中LTYPE字段查看事务锁粒度。
(1)TID锁
TID锁以事务号为封锁对象,标识为TID,为每个活动事务生成一把TID锁,代替了其他数据库行锁的功能,防止多个事务同时修改同一行记录。
(2)对象锁
对象锁通过统一的对象ID进行封锁,将对数据字典的封锁和表锁合并为对象锁,标识为OBJECT,以达到减少封锁冲突、提升系统并发性能的目的。
1)数据字典锁:用来保护数据字典对象的并发访问,解决DDL并发和DDL/DML并发问题,防止多个事务同时修改同一个对象的字典定义,确保对同一个对象的DDL操作是串行执行的。并防止一个事务在修改字典定义的同时,另外一个事务修改对应表的数据。

2)表锁:表锁用来保护表数据的完整性,防止多个事务同时采用批量方式插入、更新一张表,防止向正在使用FAST LOADER工具装载数据的表中插入数据等,保证这些优化后数据操作的正确性。此外,表锁还有一个作用,避免对存在未提交修改的表执行ALTER TABLE、TRUNCATE TABLE操作。

2.2 Oracle锁粒度

2.2.1 Oracle锁分类

根据保护的对象不同,Oracle数据库锁可以分为以下几大类:    
(1)DML锁(data locks,数据锁),用于保护数据的完整性;    
(2)DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;    
(3)内部锁和闩(internal locks and latches),保护数据库的内部结构。

2.2.2 DML锁

DML锁主要包括TM锁和TX锁,其中TM锁称为意向锁或表级锁,TX锁称为行级锁或事务锁。
(1)TM锁(也叫意向锁/表级锁):
(2)TX锁:

2.2.3 DDL锁

(1)排他DDL锁  --即6号的TM锁(Exclusive DDL Locks)
(2)共享DDL锁(Share DDL Locks)
(3)可中断解析锁(Breakable Parse Locks)

2.2.4 内部闩锁机制

(1)Latches:可译作闩或者栓,这是一种非常低级别的序列化结构,用于协调并发会话对于共享数据结构、文件等的访问。
(2)Mutex:(Mutual exclusion object):可以译作互斥体,这种结构很类似于闩,区别在于一种mutex只保护一种对象,而一种闩通常会保护多种对象。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服