达梦数据库教程(13)如何查找并解决阻塞事务

达梦数据库教程(13)如何查找并解决阻塞事务

一、数据库阻塞的原因

当一个数据库提交DML、DDL语句时出现阻塞现象通常有两种情况,一是该语句影响的数据量太多,数据库需要时间来处理,这种情况一般无需处理,等事务正常结束即可;另一种则是被其他事务的锁阻塞,产生锁的事务有可能是预期外的,比如事务没有及时提交产生了锁,这时需要及时将产生锁的事务关闭,否则会导致后面的事务堆积,影响系统的正常运行甚至导致数据库崩溃。

二、达梦数据库阻塞处理方法

1、问题定位

通过V$TRXWAIT表查看锁阻塞关系,如下面的信息中代表事务ID39948阻塞了 39943、39944,而39943 阻塞了 39944

SQL> SELECT * FROM V$TRXWAIT;
行号     ID                   WAIT_FOR_ID          WAIT_TIME   THRD_ID
---------- -------------------- -------------------- ----------- -----------
1          39943                39948                703117      3773
2          39944                39948                689783      3773
3          39944                39943                689783      3829


通过上一步查询的事务ID可以进一步查询SESSID和具体SQL,可以看到SESS_ID为127926984、TRX_ID=39948的会话阻塞了其他两个状态为RUNNING的会话

SQL> select SESS_ID,STATE,USER_NAME,TRX_ID,CREATE_TIME,RUN_STATUS,SQL_TEXT from v$sessions where TRX_ID IN (39943,39944,39948);
行号     SESS_ID              STATE  USER_NAME TRX_ID               CREATE_TIME                RUN_STATUS SQL_TEXT
---------- -------------------- ------ --------- -------------------- -------------------------- ---------- --------------------------------------
1          127926984            IDLE   CJC       39948                2024-05-10 15:34:49.000000 IDLE       SELECT * FROM t1;
2          140736720183832      ACTIVE CJC       39943                2024-05-10 15:35:00.000000 RUNNING    update t1 set name='ddddd' where id=3;
3          140736285014184      ACTIVE CJC       39944                2024-05-10 15:35:21.000000 RUNNING    update t1 set name='eeeee' where id=3;

2、解决方法

操作前与业务沟通确认SESS_ID=127926984 、TRX_ID=39948 的会话是否能杀掉,如果可以强制结束则通过sp_close_session来处理

call sp_close_session('127926984');


文章评论

猜你喜欢

达梦数据库教程(16)审计规则介绍与配置

国产数据库 达梦数据库教程(16)审计规则介绍与配置

一、达梦数据库审计功能介绍数据库审计功能的主要作用是对数据的操作进行记录,比如谁在什么时间、通过什么IP、执行了什么SQL。只有当配置了合理的审计规则后,才能对异常数据(如数据不知道为什么被删除或修改...

国产数据库 达梦数据库教程(15)SQL跟踪日志与慢查询日志

达梦数据库教程(15)SQL跟踪日志与慢查询日志
达梦数据库教程(15)SQL跟踪日志与慢查询日志
达梦数据库教程(15)SQL跟踪日志与慢查询日志
达梦数据库教程(15)SQL跟踪日志与慢查询日志

一、达梦跟踪日志达梦数据库跟踪日志即trace log,是数据库的详细诊断信息文件,该日志记录了包含系统各个会话所执行的 SQL 语句信息、参数信息、错误信息、执行时间等,用于排查故障、性能问题或内部...

达梦数据库教程(14)统计信息与执行计划

国产数据库 达梦数据库教程(14)统计信息与执行计划

一、达梦数据库执行计划执行计划就是一条 SQL 在库里的执行过程或访问路径。SQL 本身只描述了想要的结果,但是具体先访问哪张表、怎么连接,都是由 CBO 决定。CBO 依据统计信息估算SQL的代价(...

达梦数据库教程(12)守护集群部署与管理

国产数据库 达梦数据库教程(12)守护集群部署与管理

一、达梦数据库守护集群介绍达梦守护集群类似 MySQL 中的主备架构,实现原理也基本一致,主库将 REDO 日志传输到备库,备库接收并重新应用,从而实现备库与主库的数据同步。另外守护集群还提供了守护进...

达梦数据库教程(11)达梦数据库授权与版本更新

国产数据库 达梦数据库教程(11)达梦数据库授权与版本更新

一、达梦数据库授权管理1、查询授权查询授权到期时间,如果是永久授权,EXPIRED_DATE 列值是 NULL,AUTHORIZED_CUSTOMER 是用户名称SELECT * ...