一、死锁
死锁:多个线程之间互相等待,形成等待环;
对于死锁,达梦数据库会自动检测,并选择牺牲掉其中的一个事务,保证其它事务正常运行。
select * from V$DEADLOCK_HISTORY;–查询死锁历史
记录了产生死锁后被牺牲掉的事务的事务ID、会话ID、执行的SQL语句以及死锁发生时间(没有记录造成死锁的其它事务)。
二、阻塞
阻塞:多个线程之间的相互影响,等待临界资源;
对于阻塞,达梦数据库不会自动处理,被阻塞的事务会一直挂起。应尽量形成短事务,快速提交。
在达梦数据库中,查询永远不会被阻塞,SELECT FOR UPDATE的情况除外。
当多个事务同时向有主键或唯一约束的表中插入相同的数据,会造成INSERT语句被阻塞的情况
所需要操作的数据被其它事务修改过,且一直没有提交或回滚,会造成删、改语句被阻塞的情况
针对这些阻塞,可以按需采取两种解决方案。
1、提交或回滚产生阻塞的事务。
rollback;
commit;
2、关闭产生阻塞的会话
使用系统过程 SP_CLOSE_SESSION(SESS_ID)来关闭对应的会话
文章
阅读量
获赞