DM8 锁模式

DM8 支持多用户并发访问、修改数据,所以就有可能多个事务访问同一条数据导致数据库不一致的情况。所以需要锁来对并发访问进行控制。

DM支持4种不同的锁模式:

  • 共享锁
  • 排他锁
  • 意向共享锁
  • 意向排他锁

共享锁

表明该事务访问表中所有元组,其他事务不能对该表做任何更新操作。

允许操作:其它事务在该表上作查询,但是不允许作修改,且允许多个事务在同一表上并发地持有 共享表封锁。

禁止操作:其它事务对表进行执行意向排他锁和排他锁方式封锁。

排他锁

只允许持有封锁的事务可对该表进行修改。

允许操作:不允许任何操作。

禁止操作:其它事务对表执行任何 DML 语句,即不能插入、修改和删除该表中的行,封锁该表中 的行或以任何方式封锁表。

意向共享锁

该事务封锁了表上的一些元组并试图修改它们。

允许操作:其他事务对该表的并发查询、插入、更新、删除或在该表上进行封锁,其他事务可以同 时上意向共享锁、意向排他锁、共享锁。

禁止操作:其它事务以排他锁方式存取该表。

意向排他锁

该事务对表的元组进行一次或多次修改。

允许操作:其它事务并行查询、插入、更新、删除或封锁该表上行,允许多个事务在同一表上获得 意向排他和意向共享锁。

禁止操作:其它事务对表进行共享或者排他读写封锁。

一个事务可以拥有一个或多个锁,但是有些锁是不相容的,如下图所示:

比如当一个表加入了 IS 锁,就不能再加入 X 锁了;一个表加了 X 锁,就不能加其他锁了。

如果一个事务占用了锁的资源,并且这个锁的资源也是另一个事务所需要的,这时这两个事务就会发生冲突,就会发生堵塞。

一般来说,等待第一个事务结束之后,该事务就会释放锁资源,第二个事务就能顺利执行。但是如果这两个事务互相形成了依赖关系,那么就形成了死锁,此时 DM 数据库就会选择牺牲掉一个事务。


查看锁

可以通过 V$LOCK 这个视图来查看当前系统中锁的状态、事务 ID 等信息。

检测活动事务

可以通过 V$TRXWAIT 来查看事务的等待信息,可以查看当前系统中事务等待信息。

查看死锁

同意通过 V$DEADLOCK_HISTORY 来查看死锁的历史信息。

可以通过检测活动事务,查到所等待的事务 ID (WAIT_FOR_ID),通过查询会话 (V$SESSION),就可以查询到具体的会话内容(SQL_TEXT),此时可以判断是否需要清除所等待的事务来保证当前事务正常运行,通过 SP_CLOSE_SESSION(SESS_ID) 来关闭这个会话。

 达梦社区网址:eco.dameng.com/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值