达梦数据库锁介绍

锁模式

  1. 共享锁
    共享锁(Share Lock,简称 S 锁)用于读操作,防止其他事务修改正在访问的对象。这种封锁模式允许多个事务同时并发读取相同的资源,但是不允许任何事务修改这个资源。
  2. 排他锁
    排他锁(Exclusive Lock,简称 X 锁)用于写操作,以独占的方式访问对象,不允许任何其他事务访问被封锁对象;防止多个事务同时修改相同的数据,避免引发数据错误;防止访问一个正在被修改的对象,避免引发数据不一致。一般在修改对象定义时使用。
  3. 意向锁
    意向锁(Intent Lock)用于读取或修改被访问对象数据时使用,多个事务可以同时对相同对象上意向锁,DM 支持两种意向锁:
  1. 意向共享锁(Intent Share Lock,简称 IS 锁):一般在只读访问对象时使用;
  2. 意向排他锁(Intent Exclusive Lock,简称 IX 锁):一般在修改对象数据时使用。

锁粒度

按照封锁对象的不同,锁可以分为 TID 锁和对象锁。

  1. TID 锁
    TID 锁以事务号为封锁对象,为每个活动事务生成一把 TID 锁,代替了其他数据库行锁的功能,防止多个事务同时修改同一行记录。DM 实现的是行级多版本,每一行记录隐含一个 TID 字段,用于事务可见性判断。
  2. 对象锁
    对象锁是 DM 新引入的一种锁,通过统一的对象 ID 进行封锁,将对数据字典的封锁和表锁合并为对象锁,以达到减少封锁冲突、提升系统并发性能的目的。我们先看一下通常数

据字典锁和表锁各自应承担的功能:

  1. 数据字典锁:用来保护数据字典对象的并发访问,解决 DDL 并发和 DDL/DML 并发问题,防止多个事务同时修改同一个对象的字典定义,确保对同一个对象的 DDL操作是串行执行的。并防止一个事务在修改字典定义的同时,另外一个事务修改对应表的数据。

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

TID锁查看

1、查看表中 TID 字段
在这里插入图片描述
说明:TRXID为事务ID。

2、查看动态视图中TID锁
在这里插入图片描述
3、查看表中TRXID字段内容
在这里插入图片描述

如何利用TID锁控制数据库版本

1、每一条物理记录中包含了两个字段:TID和 RPTR。TID 保存修改记录的事务号,RPTR 保存回滚段中上一个版本回滚记录的物理地址。
2、回滚记录与物理记录一样,增加了两个字段:TID 和 RPTR。TID 保存回滚记录对应的事务号,RPTR 保存回滚段中上一个版本回滚记录的物理地址。
a、如果NEXT_TID >TRXID 表示当前事务在数据修改数据的事务之后,结合活动事务动态视图,如果TRXID在活动事务中,表示事务未递交则数据在其它事务不可见。
b、如果NEXT_TID<TRXID表示当前事务在数据修改数据的事务之前,则数据不能被当前事务可见。
c、如果NEXT_TID=TRXID表示当前事务为修改数据的事务

链接: 达梦技术社区https://eco.dameng.com/.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值