广告
返回顶部
首页 > 资讯 > 数据库 >达梦8 死锁模拟
  • 912
分享到

达梦8 死锁模拟

2024-04-02 19:04:59 912人浏览 泡泡鱼
摘要

1.创建两个简单的表t1_deadlock和t2_deadlock,每个表中仅仅包含一个字段a sql> create table t1_deadlock (a int); 操作已执行 已用时间

1.创建两个简单的表t1_deadlock和t2_deadlock,每个表中仅仅包含一个字段a


sql> create table t1_deadlock (a int);

操作已执行
已用时间: 6.906(毫秒). 执行号:23.
SQL> create table t2_deadlock (a int);
操作已执行
已用时间: 3.168(毫秒). 执行号:24.

2.每张表中仅初始化一条数据


SQL> create table t2_deadlock (a int);

操作已执行
已用时间: 3.168(毫秒). 执行号:24.
SQL> insert into t1_deadlock values (1);
影响行数 1
已用时间: 0.566(毫秒). 执行号:25.
SQL> insert into t2_deadlock values (2);
影响行数 1
已用时间: 0.803(毫秒). 执行号:26.
SQL> commit;
操作已执行
已用时间: 1.057(毫秒). 执行号:27.

3.在第一个会话session1中更新表t1_deadlock中的记录“1”为“1000”,不进行提交


SQL> update t1_deadlock set a = 1000 where a = 1;

影响行数 1
已用时间: 1.608(毫秒). 执行号:28.

4.在第二个会话session2中更新表t2_deadlock中的记录“2”为“2000”,不进行提交


SQL> update t2_deadlock set a = 2000 where a = 2;

影响行数 1
已用时间: 3.345(毫秒). 执行号:29.

5.此时,没有任何问题发生。OK,现在注意一下下面的现象,我们再回到会话session1中,更新t2_deadlock的记录


SQL> update t2_deadlock set a = 2000 where a = 2;

这里出现了“等待”(“阻塞”)的现象,原因很简单,因为在session2中已经对这条数据执行过这个操作,在session2中已经对该行加了行级锁。

注意,这里是“锁等待”,不是“死锁”,注意这两个概念的区别!

6.我们关注的“死锁”马上就要隆重出场了:在会话session2中,更新t1_deadlock的记录


SQL> update t1_deadlock set a = 1000 where a = 1;

update t1_deadlock set a = 1000 where a = 1;
[-6403]:死锁.
已用时间: 310.980(毫秒). 执行号:0.

7.以上种种现象说明什么?

说明: DM对于“死锁”是会做自动处理的,而不是不闻不问。

8.总结

死锁与阻塞的不同之处在于死锁包括两个或者多个已阻塞事务,它们之间形成了等待环,每个都等待其他事务释放锁。例如事务1给表T1上了排他锁,第二个事务给表T2上了排他锁,此时事务1请求T2的排他锁,就会处于等待状态,被阻塞。若此时T2再请求表T1的排他锁,则T2也处于阻塞状态。此时这两个事务发生死锁,DM数据库会选择牺牲掉其中一个事务。

参考:《DM8系统管理员手册》19.8 锁等待与死锁检测

您可能感兴趣的文档:

--结束END--

本文标题: 达梦8 死锁模拟

本文链接: https://www.lsjlt.com/news/48086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 达梦8 死锁模拟
    1.创建两个简单的表t1_deadlock和t2_deadlock,每个表中仅仅包含一个字段a SQL> create table t1_deadlock (a int); 操作已执行 已用时间...
    99+
    2022-10-18
  • 怎么用Python模拟死锁
    这篇“怎么用Python模拟死锁”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Pyt...
    99+
    2022-10-19
  • Java多线程环境下死锁模拟
    目录1、死锁产生的条件 2、模拟多线程环境下死锁的产生3、死锁的排查 1、死锁产生的条件 互斥:一次只有一个进程可以使用一个资源。其他进程不能访问已分配给其他进程的资源。...
    99+
    2022-11-12
  • 面试官:请用SQL模拟一个死锁
    文章首发于公众号:BiggerBoy 有读者说面试被问到怎么用SQL模拟数据库死锁? 这位读者表示对Java中的死锁还是略知一二的,但是突然用SQL写死锁的案例之前还真没遇到过,这个问题没答上来。所以今天就带大家一起来看下怎么用SQL...
    99+
    2017-02-06
    面试官:请用SQL模拟一个死锁
  • Python 模拟死锁的常见实例详解
    目录前言模拟死锁1:线程等待本身模拟死锁2:线程互相等待模拟死锁3:以错误的顺序获取锁模拟死锁4:锁未释放总结前言 常见的例子是在银行账户上:假如要在两个银行账户之间执行交易,你必须...
    99+
    2022-11-11
  • MySQL在RR隔离级别下的unique失效和死锁模拟
    今天在测试MySQL事务隔离级别的时候,发现了一个有趣的问题,也参考了杨一之前总结的一篇。http://blog.itpub.net/22664653/viewspace-1612574/ &nb...
    99+
    2022-10-18
  • java多线程学习之死锁的模拟和避免(实例讲解)
    1.死锁死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。Java 死锁产生的四个必要条件:互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用不可抢...
    99+
    2023-05-31
    java 多线程 避免
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作