Oracle多线程查询记录锁死问题

Oliver2891 2013-05-02 10:33:31
开了5个线程,它们共用一个连接,即一个静态的OracleConnection,这5个线程同时执行一个SQL语句进行查询,比如select * from MyTable where name='aaa',即5个线程同时查询同一个表的同一条记录,查询的结果是用的OracleDataAdapter的Fill方法,返回一个结果集DataSet,每个线程new一个OracleDataAdapter和DataSet,当这几个线程同时执行到OracleDataAdapter的Fill方法的时候,就都卡死在这里了,请教高手谁知道这是怎么回事,该怎么解决这种情况?

在C#程序中,用lock方法让每个线程函数串行执行,这样是可以解决问题的,但这样解决的话,如果有多个查询同时进行,那就会等待很长时间才能完成,效率就低了,不知道在oracle数据库层有没有别的解决办法。
...全文
395 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vanjayhsu 2013-05-08
  • 打赏
  • 举报
回复
好像BLOB的读取是特殊一些的,试试把BLOB和其他字段的读取分开处理看看是否会有问题,或者只读取BLOB字段 select blob from MyTable where name='aaa'
wqkjj 2013-05-07
  • 打赏
  • 举报
回复
可能是你的底层不支持BLOB并行或者有bug,找底层高版本试试?
wqkjj 2013-05-03
  • 打赏
  • 举报
回复
这个不关oracle底层的事情,并发查询是数据库的最基本功能之一。估计是你用ODBC API方式不对或者你的ODBC不支持数据库的多线程处理。从你的描述来看,串行可以,并行不行,应该是你用的API库不支持多线程并行。
Oliver2891 2013-05-03
  • 打赏
  • 举报
回复
今天又测试了一下,发现是这样的:如果需要并发查询表中的BLOB类型字段就会锁死在那,如果不查询该类型字段就可正常运行,不知道BLOB类型为什么会有这样的问题?期待高手来解答一下。

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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