
达梦数据库教程(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');
猜你喜欢
国产数据库 达梦数据库教程(15)SQL跟踪日志与慢查询日志




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

国产数据库 达梦数据库教程(14)统计信息与执行计划
一、达梦数据库执行计划所有DBMS的执行计划作用基本都是相同的,用于显示一条 SQL 语句在数据库中的执行过程,通过执行计划可以看出SQL影响数据量、是否有使用合理的索引等,有助于SQL优化1、达梦数...

国产数据库 达梦数据库教程(12)守护集群部署与管理
一、达梦数据库守护集群介绍达梦数据库通过守护集群可以实现主备模式或读写分离集群,二者在搭建过程上基本一致,区别在于:· 数据守护集群:通常使用实时归档 + ARCH WAIT APPLY=0 (高性能...

国产数据库 达梦数据库教程(11)达梦数据库授权与版本更新
一、达梦数据库授权管理1、查询授权查询授权到期时间,如果是永久授权,EXPIRED_DATE 列值是 NULL,AUTHORIZED_CUSTOMER 是用户名称SELECT * ...
国产数据库 达梦数据库教程(9)达梦数据库定时备份配置




一、达梦数据库备份管理达梦数据库通过自带的一些函数以及动态视图可以实现定期物理备份、清理历史备份集等自动化操作,不需要再额外配置操作系统的计划任务。如果是需要自动化逻辑备份的话,则需要使用dexp结合...
文章评论