C# 用OracleBulkCopy 多线程批量插入oracle的一张表,锁问题

猴子写代码 2014-09-29 07:01:59
问题描述:如上
背景:现有几十个子线程(50个),每个子线程用OracleBulkCopy 批量插入数据到同一张表
出现问题:报表被锁问题
问题猜想:一个子线程在插入这个表的时候,但还没插完,另一个子线程也要插这个表,
但表被第一个线程给锁住了,
这样的 话
OracleBulkCopy 会不会报表被锁?

请大神指点
...全文
626 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
猴子写代码 2014-10-09
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
[quote=引用 3 楼 jeabo 的回复:] 我现在改成所有子线程不做插数据操作了,等所有线程跑完,然后一起插入,但是OracleBulkCopy 貌似会破坏索引
子线程中使用 ADO.NET 通过普通的 Insert 语句插入呗。别用什么 OracleBulkCopy 呗。[/quote] 。。。我为什么摒弃ado。net普通的insert语句,肯定有原因的啊,datatable中可能有几十万条数据,用insert拼接字符串,循环rows特别慢,是不是还有其他方法,插入大批量数据?
猴子写代码 2014-10-09
  • 打赏
  • 举报
回复
最后在子线程中不做数据库操作,在所有线程做完了,批量插入,但是如果多个人同时操作这个表的时候会破坏表结构
  • 打赏
  • 举报
回复
引用 3 楼 jeabo 的回复:
我现在改成所有子线程不做插数据操作了,等所有线程跑完,然后一起插入,但是OracleBulkCopy 貌似会破坏索引
子线程中使用 ADO.NET 通过普通的 Insert 语句插入呗。别用什么 OracleBulkCopy 呗。
猴子写代码 2014-10-01
  • 打赏
  • 举报
回复
引用 2 楼 lineages 的回复:
设计不合理,开多个线程的目的无非为了处理一些耗时的任务; 但你的瓶颈全在数据库,所有线程都需要排队插数据,一堆线程阻塞在那什么也干不了,加上线程切换的开销,GC的压力, 性能反而不如单线程来的高。
我现在改成所有子线程不做插数据操作了,等所有线程跑完,然后一起插入,但是OracleBulkCopy 貌似会破坏索引
暈哥 2014-09-30
  • 打赏
  • 举报
回复
设计不合理,开多个线程的目的无非为了处理一些耗时的任务; 但你的瓶颈全在数据库,所有线程都需要排队插数据,一堆线程阻塞在那什么也干不了,加上线程切换的开销,GC的压力, 性能反而不如单线程来的高。
mjp1234airen4385 2014-09-30
  • 打赏
  • 举报
回复
锁表是正常的,如果时间长了,就会造成死锁或者超时错误。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧