注册
达梦数据库死锁和阻塞
培训园地/ 文章详情 /

达梦数据库死锁和阻塞

DM_901467 2023/03/03 2690 1 0

一、死锁
死锁:多个线程之间互相等待,形成等待环;

对于死锁,达梦数据库会自动检测,并选择牺牲掉其中的一个事务,保证其它事务正常运行。

select * from V$DEADLOCK_HISTORY;–查询死锁历史

记录了产生死锁后被牺牲掉的事务的事务ID、会话ID、执行的SQL语句以及死锁发生时间(没有记录造成死锁的其它事务)。

二、阻塞
阻塞:多个线程之间的相互影响,等待临界资源;

对于阻塞,达梦数据库不会自动处理,被阻塞的事务会一直挂起。应尽量形成短事务,快速提交。

在达梦数据库中,查询永远不会被阻塞,SELECT FOR UPDATE的情况除外。

当多个事务同时向有主键或唯一约束的表中插入相同的数据,会造成INSERT语句被阻塞的情况

所需要操作的数据被其它事务修改过,且一直没有提交或回滚,会造成删、改语句被阻塞的情况

针对这些阻塞,可以按需采取两种解决方案。

1、提交或回滚产生阻塞的事务。
rollback;
commit;

2、关闭产生阻塞的会话
使用系统过程 SP_CLOSE_SESSION(SESS_ID)来关闭对应的会话

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服