达梦数据库遇到select引起的阻塞问题

在数据库中一般只有DML操作不提交(或回滚)才会遇到阻塞问题,但是在使用过程中有阻塞发现引起阻塞的SQL为select,但实际上select并不会引起阻塞,其实就是一个会话执行完update又执行select且没有提交或回滚导致的。下面还原一下这种情况。

1.创建一张测试表:

CREATE TABLE "SYSDBA"."T1"
(
"ID" INT,
"FD_TIME" VARCHAR2(50));
insert into t1 values(1,'first');
insert into t1 values(3,'third');
commit;

2.在会话1中更新一条数据不提交:

update t1 set id=2 where id=1;

在这里插入图片描述
3.在会话2中更新同一条数据,此时会发现该条SQL一直处于执行状态。这是正常的。查询引起阻塞的原因也是上一条update未提交或回滚导致第二条update阻塞。
在这里插入图片描述
在这里插入图片描述
-----查询阻塞信息:

SELECT SYSDATE                                  STATTIME,
       DATEDIFF(SS, S1.LAST_SEND_TIME, SYSDATE) SS,
       '被阻塞的信息'                           WT,
       S1.SESS_ID                               WT_SESS_ID,
       S1.SQL_TEXT                              WT_SQL_TEXT,
       S1.STATE                                 WT_STATE,
       S1.TRX_ID                                WTTRX_ID,
       S1.USER_NAME                             WT_USER_NAME,
       S1.CLNT_IP                               WT_CLNT_IP,
       S1.APPNAME                               WT_APPNAME,
       S1.LAST_SEND_TIME                        WT_LAST_SENDTIME,
       '引起阻的信息'                           FM,
       S2.SESS_ID                               FM_SESS_ID,
       S2.SQL_TEXT                              FM_SQL_TEXT,
       S2.STATE                                 FM_STATE,
       S2.TRX_ID                                FM_TRX_ID,
       S2.USER_NAME                             FM_USER_NAME,
       S2.CLNT_IP                               FM_CLNT_IP,
       S2.APPNAME                               FM_APPNAME,
       S2.LAST_SEND_TIME                        FM_LAST_SEND_TIME
from v$sessions s1,
     v$sessions s2,
     v$trxwait w
where s1.trx_id = w.id
  and s2.trx_id = w.wait_for_id;

4.此时在会话1中在不提交不回滚的情况下,再执行一条select语句,此阻塞信息就变成了select相关SQL。
在这里插入图片描述
在这里插入图片描述
5.解决以上阻塞只能是将第一个会话的update进行提交或回滚或将会话杀死才能解决该阻塞问题。
注:因此在达梦数据库中如果有dml先关操作一定要进行commit或rollback.避免产生阻塞。

6.下面是一些关联关系和排查视图。
1)查询出的相关事务号
在这里插入图片描述
在这里插入图片描述
2)查询dba_objects与v$lock视图间的事务关系。

select * from dba_objects where owner='模式名' AND OBJECT_NAME='表名';

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值