美文网首页
达梦数据库表被锁的处理办法

达梦数据库表被锁的处理办法

作者: 喵咪很生气 | 来源:发表于2020-06-01 18:35 被阅读0次

达梦数据库支持多用户并发访问、修改数据。在实际工作中,有可能出现多个事务同时访问、修改相同数据的情况,当一个事务正在占用某个资源的锁,此时另一个事务正在请求这个资源上与第一个锁相冲突的锁类型时,就会发生阻塞。此时,被阻塞的事务将一直挂起,直到持有锁的事务放弃锁定的资源为止。本文就将给大家介绍如何使用对应的动态性能视图查看阻塞以及如何解决阻塞。

1.创建测试表并插入数据

建表:

SQL>create table T3(id INT, name VARCHAR(50));

录入测试数据:

begin
    for i in 1..100 loop
        insert into t3 values(1,'test'||i);
    end loop;
commit;
end;
image.png

2.在 T3 上面生成 TID 锁

执行 update 操作并且不提交,具体操作如下:

SQL>update t3 set name='AAA' where id=1;
image.png

3.开启新会话

3.1 在新会话下执行 select 操作
SQL>select * from "SYSDBA"."T3";
image.png

可以看到,由于 MVCC 的多版本机制,写不会阻塞读,所以 select 操作可以正常进行。但是前面的事务没有提交,所以查出来的结果还是旧版本的值,也就是 update之前的值。

3.2 在新会话下执行 DML 操作
SQL>delete from t3 where id=1
image.png

此时,由于 delete 操作需要加上与之前 update 操作相同类型的锁,所以阻塞发生,当前事务被挂起。

4.阻塞的排查

当阻塞发生时,我们可以通过 v$lock 视图查到当前数据库中锁的状态

SQL>select * from V$LOCK
image.png

结果中我们可以看到,事务 2323 被阻塞了,阻塞他的事务为 2319,同样我们也可以通过 V$TRXWAIT 视图查找谁阻塞谁

SQL>select * from V$TRXWAIT 
image.png

得出同样的结果,ID 为 2323 的事务正在等待 ID 为 2319 的事务,等待时间是352784毫秒。
接下来,通过 V$SESSIONS 视图查找两个事务对应的会话

select sess_id,sql_text,state,trx_id from V$SESSIONS;
image.png

可以得到两个事务对应的会话 ID 和当前执行 SQL 语句,可以知道是哪些 SQL 语句产生的阻塞。

5.阻塞的解决方法

5.1 提交或回滚产生阻塞的事务。

根据上文,我们可知产生阻塞的事务会话 ID 为140168608750888 。此时,我们只需要在该会话下提交或回滚事务,锁自然会被释放,阻塞解决。

5.2 关闭产生阻塞的会话

同样,我们也可以使用系统过程 SP_CLOSE_SESSION(SESS_ID)来关闭对应的会话,具体使用方法如下。

SP_CLOSE_SESSION(140168608750888);
image.png

此时,锁被释放,delete 操作也可以顺利进行下去。O_O

相关文章

  • 达梦数据库表被锁的处理办法

    达梦数据库支持多用户并发访问、修改数据。在实际工作中,有可能出现多个事务同时访问、修改相同数据的情况,当一个事务正...

  • springboot-mybatis数据库从mysql迁移到达梦

    背景 领导要求支持国产数据库项目要适配达梦6、达梦7、gbase、金仓等国产数据库。 1. 表数据迁移 幸好达梦6...

  • MySQL数据库 表被锁的解决办法

    客户提供的表被锁截图 1.可以通过控制台登陆DMC界面,将没有执行完的线程Kill掉,具体操作如下:2.可以通过命...

  • MySQL听讲(四)——数据库锁

    数据库的锁分为全局锁、表锁、行锁。 科普 锁的缩写:MDL(metadata lock):元数据锁。 全局锁 表锁 行锁

  • mysql了解,理解

    数据库锁的分类 按照锁的粒度划分,可分为表级锁、行级锁、页级锁 MyISAM 支持表级锁,InnoDB 支持表级锁...

  • (MySQL死锁认识二)数据库中的锁

    数据库中的锁按照不同的方式区分有不同的结果,按照锁的粒度区分,可分为表级锁和行级锁 表锁和行锁 表锁意为对整张表加...

  • mysql锁机制

    1,数据库锁理论概述分类: 读锁、写锁。行锁,表锁,页锁。1.1 表锁:无死锁,加锁快加锁:lock tabl...

  • mysql进阶-行级锁、表级锁、乐观锁、悲观锁

    从应用的角度来看数据库锁可分为悲观锁、乐观锁从数据库(InnoDB)的角度看,数据库锁可以分为行级锁和表级锁 1....

  • SqlServer表、日志查询

    数据库空间大小 数据库空间大小检查索引是否丢失 查询某个表的列名称、说明、备注、类型等 被锁的表以及如何解锁 查询...

  • MySQL 锁表

    Linux System Environment MySQL锁表简介 MySQL锁表是禁止用户在数据库增加/删除/...

网友评论

      本文标题:达梦数据库表被锁的处理办法

      本文链接:https://www.haomeiwen.com/subject/tduszhtx.html