达梦数据库SQL阻塞分析及解决办法

阻塞测试:概念:阻塞的产生往往与事务的并发一起出现,产生的原因与锁有关。当一个事务正在占用某个资源的锁,此时另一个事务正在请求这个资源上与第一个锁相冲突的锁类型时 ,就会

发生阻塞。被阻塞的事务将一直挂起,直到持有锁的事务放弃锁定的资源为止。

建个测试表:

CREATE TABLE "SYSDBA"."TEST1" 
( 
"NAME" VARCHAR(20), 
"ID" INT NOT NULL, 
NOT CLUSTER PRIMARY KEY("ID"));

打开两个查询窗口:

在两个窗口都输入插入数据语句:

insert into sysdba.test1 values('aaa',1); 

 

一个窗口顺利执行:

 

第二个窗口无反应,发生阻塞:

 

原因分析:第一个窗口里,插入的数据由于没有 commit 提交,事务没有结束,此时因为存在主键约束,第二个窗口查不到对应的数据,同样也无法插入,此时发生阻塞。

解决阻塞办法:

通过 v$trxwait 视图查看进程,找到id,id对应着v$sessions视图的sess_id:

 

4051 即为被堵塞的事务,在通过 v$sessions 视图查看:

 

4051 即为第二个窗口的插入语句。

可调用 SP_CLOSE_SESSION(SESS_ID);系统函数来关闭会话。

SP_CLOSE_SESSION(4051);

如何避免阻塞(有两种方法):

  1. 在第一个窗口使用 commit 指令提交: 

 第二个窗口:

 

2.在第一个窗口使用 rollback,第二个窗口可正常插入。

更多资讯请上达梦技术社区了解: https://eco.dameng.com

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值