Oracle数据库在多线程下插入数据效率的问题。

TLJewel 2011-03-09 10:51:26
先说下我的系统插入数据的方式:
开了多个线程同时插入数据,每个线程一次性插入61条数据(一条数据插入到主表,另外60条插入到从表),每60秒重复此操作。具体的插入代码我会建立一个OracleConnection连接,等61条数据插入完毕后再关闭它。但是,在50个线程下效果很不理想,会出现“超时时间已到,已超出连接池的连接数量 ”的错误。


//建立一个连接
OracleConnection connection = new OracleConnection(OracleHelper.ConnectionStringLocalTransaction);

foreach (PressureInfo p in pressureInfoList)
{
//其他操作
OracleHelper.ExecuteNonQuery(connection, CommandType.Text, strSqlPressure.ToString(), parametersPressure);
}


connection.Close();



正在检查什么地方出错了。请大家帮帮忙
...全文
908 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
calmzeal 2011-03-09
  • 打赏
  • 举报
回复
关于你的数据量的建议 楼上几个都说了
最好就是不用多线程

单就你的问题来说
客户端 连接池是可以配置最大连接数量的 在web.config里面

另外一个限制就在Oracle
Oracle 本身就存在一个Open_Cursor参数 默认300
你超过300个线程的话即使配置了客户端连接池数量 还是会报错
解决办法是增加该参数的值

希望对扩充你的思路有所帮助
机器人 2011-03-09
  • 打赏
  • 举报
回复
认为线程越多效率越高了。是错的。你这样的应用不用线程都OK。
60条数据的插入,应该是0.01-2s的速度。
yanran_hill 2011-03-09
  • 打赏
  • 举报
回复
一般来说,多线程存取数据库,还是使用缓冲池进行异步处理比较好,就是说把要处理的数据放到一个能够进行原子操作的内存队列里,另外开几个线程连接数据库,然后从队列中取数据、存库,开几个线程根据需要灵活配置,这样的效率还是有保证的。
ycproc 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qldsrx 的回复:]
你又不是每个线程往不同的数据库中插入,自然不会快多少,一般2个线程就达到峰值,别说你50个线程了。
多线程仅仅解决了你数据传输到服务器占用的时间,让数据的传输和数据库中的执行达到同步,线程过多反而变慢是因为数据库要维护的锁变多了,事务的开销降低了效率。
[/Quote]
这个观点我认同

锁变多了 反而 会降低数据库的性能
qldsrx 2011-03-09
  • 打赏
  • 举报
回复
你又不是每个线程往不同的数据库中插入,自然不会快多少,一般2个线程就达到峰值,别说你50个线程了。
多线程仅仅解决了你数据传输到服务器占用的时间,让数据的传输和数据库中的执行达到同步,线程过多反而变慢是因为数据库要维护的锁变多了,事务的开销降低了效率。
TLJewel 2011-03-09
  • 打赏
  • 举报
回复
坐等高手出现。
flyerwing 2011-03-09
  • 打赏
  • 举报
回复
估计不会快多少吧,毕竟都一样吧.

110,533

社区成员

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

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

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