DeepSeek 帮我解决了一个死锁问题!

人工智能 Oracle
定位到死锁的原因后,解决方法可能有几种。如果是应用逻辑的问题,可能需要调整事务的顺序,比如让不同会话以相同的顺序访问表,减少交叉锁的可能性。

大家好,我是君哥。

最近在生产上遇到一个死锁问题,Oracle 抛出了 ORA-000060 异常

业务场景:程序按行读取一个上游系统送的文件数据(大概有几万行),读取到数据后,每 500 行分配给一个线程去批量更新数据库(使用主键)。表结构类似下面:

user_id(PK)

user_name

age

sex

00001

tom

6

man

00002

jimi

11

woman

给出一段批量更新的代码:

<update id="updateUser"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update tb_user set user_name=#{item.userName} age = #{item.age} where user_id= #{item.userId}
    </foreach>      
</update>

遇到问题后,我们想先问一下 DeepSeek,看它能不能帮忙解决。不得不说,DeepSeek 的深度思考太厉害了。

下面这句话直接给了我思路:

定位到死锁的原因后,解决方法可能有几种。如果是应用逻辑的问题,可能需要调整事务的顺序,比如让不同会话以相同的顺序访问表,减少交叉锁的可能性。

我猜测问题可能就是文件里面存在相同 user_id 的数据,而且文件数据没有按照 user_id 排序,导致不同线程更新时,出现了锁等待。类似下面的 2 个线程。 

线程一:

update tb_user set user_name=#{item.userName} age = #{item.age} where user_id = '00001';
update tb_user set user_name=#{item.userName} age = #{item.age} where user_id = '00002';

线程二:

update tb_user set user_name=#{item.userName} age = #{item.age} where user_id = '00002';
update tb_user set user_name=#{item.userName} age = #{item.age} where user_id = '00001';

我把读取的文件数据看了一下,确实有这个情况。

不得不说,DeepSeek 确实靠谱,我们看下 DeepSeek 给出的定位死锁的方法,基本上根据日志、跟踪文件来判断。

找到问题原因后,解决方案就很容易了。

  • 通知上游系统把文件数据按照 user_id 进行排序
  • 后期优化,相同 user_id 的数据只保留一条日期最新的就行了

DeepSeek 也给出的详细的解决死锁的方法,见下图:

下面,再看一下 DeepSeek 给出的预防措施和死锁分析报告示例。

最后,附上 Oracle 官方对 ORA-000060 异常的描述

责任编辑:姜华 来源: 君哥聊技术
相关推荐

2023-02-21 17:06:49

硬件软件系统

2025-01-20 13:20:00

MySQL数据迁移数据库

2016-10-20 15:27:18

MySQLredo死锁

2025-02-11 00:00:00

2025-02-11 09:17:57

2023-02-07 09:58:29

ChatGPT智能家居

2010-04-29 17:46:31

Oracle死锁

2021-06-08 08:38:36

MySQL数据库死锁问题

2023-09-21 23:08:36

MySQL数据库死锁

2021-08-09 10:24:21

技术分类数学

2024-03-18 09:10:00

死锁日志binlog

2022-05-31 08:35:05

RocketMQACK客户端

2022-05-12 08:22:54

内核oopsPC

2021-12-09 11:31:16

跨域后端开发

2025-02-11 08:20:00

DeepseekAIOPS人工智能

2018-09-30 08:00:15

区块链碳排放气候

2018-07-04 14:56:02

HTTP传输编码

2025-01-13 00:00:10

SwaggerAI项目

2018-08-03 12:21:02

2010-04-02 10:29:02

CentOS安装
点赞
收藏

51CTO技术栈公众号