多线程4000W数据存储ORACLE出现死锁?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

多线程4000W数据存储ORACLE出现死锁?报错

2020-06-06 10:43:40 374 1

@局长 你好,想跟你请教个问题:

场景
对客户进行风险测评,客户量比较大,测评的话是根据客户的一些基本信息、交易信息去计算分数,比如倘若同一个客户某段时间内的交易次数超过5次,逻辑判断就会加上相应的分数。 现在采用多线程的,进行分批处理  ,假设100w客户,10个线程 ,单个线程处理量为5w  这样就会分为20个批次,10个线程同时进行,逻辑测评完  需要update客户表的某些字段,如分数等,需要插入每个客户的分数日志 ,还需要insert每个客户每道题对应的一个分数(单个客户会产生20条详情记录),附耗时主要是数据库的表操作。

多线程模型

if (exec == null){
      exec = Executors.newFixedThreadPool(10); // 10个线程
}
for(int i = 0; i < 20; i++){
   exec.execute("do sth"); // 测评已经分好批的客户,包括逻辑判断、表更新与插入
}
// 说明:线程内部缓存的客户,题目得分情况都是用的list,每次new的

问题
测评客户数量超过200W就会出现死锁啥的,报错java.sql.BatchUpdateException:ORA-00060:等待资源时检测死锁
查看ORCLE中发现得分详情表被锁住了,并且是三级锁

自我分析
网上看了挺多资料,ORACLE用的是行级锁,只是对想锁定的数据才进行锁定,其余的数据不相干,所以在对Oracle表中并发插数据的时候,基本上不会有任何影响。在这个场景中每个线程没有共享变量,数据都是线程内部获取,不会有任何冲突。

解决(不明不白)
将线程内部的list改为Vector就不会出现,一头雾水。难道线程内部创建的对象不是每个线程私有的吗?

求多线程大神指导

取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-06 10:43:59
                        <p>关键部分的代码发出来看一下</p>
                    
    
                        换了vector可以,是因为它是线程安全的,也说明你代码有问题 
                    
    
                            我100w左右数据正常,超过200w就会出现死锁啥的
                        
    
                        <p>vector是线程安全的,arraylist不是线程安全的,不会你不知道吧?看你最后的那句话,应该是你的多线程代码中存在多线程竞争共享资源</p>
                    
    
                            回复 <a class="referer" target="_blank">@桑科</a>  : 评测方法是否加锁了呢?
                        
    
                            回复 <a class="referer" target="_blank">@桑科</a>  : 评测方法是否加锁了呢?
                        
    
                            知道vector是线程安全,但是代码中我并没有共享list,我每个线程都调用同一个测评方法,测评方法内部都会重新new一个list
    
    0 0
相关问答

30

回答

云计算之路:为什么要选择云计算

cnblogs 2013-03-27 10:22:27 144911浏览量 回答数 30

20

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1275285浏览量 回答数 20

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 160029浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 341392浏览量 回答数 8

119

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 302678浏览量 回答数 119

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148987浏览量 回答数 22

39

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 263667浏览量 回答数 39

21

回答

请教一下数据量有100万条左右要什么配置?

易网网络 2013-03-27 15:18:02 193718浏览量 回答数 21

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 310368浏览量 回答数 251

2

回答

区域选择帮助

fanyue88888 2012-12-07 15:54:30 205764浏览量 回答数 2
+关注
爱吃鱼的程序员
https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
2
文章
21568
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载