Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Oracle中的大容量插入性能_C#_Oracle_Bulkinsert_Odac - Fatal编程技术网

C# Oracle中的大容量插入性能

C# Oracle中的大容量插入性能,c#,oracle,bulkinsert,odac,C#,Oracle,Bulkinsert,Odac,我尝试了很多解决方案,但我仍然不明白:我得到了一个简单的insert(包含40个不同类型的列(blob)),我尝试为每个参数插入这种类型的数据传递(我使用c#中的Odac)值数组 结果是对4000行左右的ExecuteOnQuery进行了一次调用,问题是这个插入没有那么多元素,持续了3小时 有什么建议吗?数据源来自软件,因此无法链接到db上,它的内存数据和我所做的一切就是将它们放入数组中,并将它们作为oraclecommand的输入参数传递给我,然后我运行它 在这种情况下,使用StoredPro

我尝试了很多解决方案,但我仍然不明白:我得到了一个简单的insert(包含40个不同类型的列(blob)),我尝试为每个参数插入这种类型的数据传递(我使用c#中的Odac)值数组

结果是对4000行左右的ExecuteOnQuery进行了一次调用,问题是这个插入没有那么多元素,持续了3小时

有什么建议吗?数据源来自软件,因此无法链接到db上,它的内存数据和我所做的一切就是将它们放入数组中,并将它们作为oraclecommand的输入参数传递给我,然后我运行它

在这种情况下,使用StoredProcess会有什么不同吗?为什么

insert实际上在一个事务中,但我尝试插入的表中根本没有索引,db是Oracle XE的常规安装,有100个表,事务只包括这个insert和其他一些不太大的操作。 我尝试插入的总数据最大为100 Mb…我不知道应该再次检查什么:(


同样:事务似乎不会影响性能,速度也不是线性的,即1000elements=10分钟,4000element=3小时..所有这些都是cpu 100%和巨大的内存使用

插入4000行需要3小时?这是问题吗?除非每行都有几GBs长,否则这种性能没有真正的借口-你需要看看dDatabase(或者让您的DBA来做),而不是您的C#代码。

是否愿意发布您尝试过的内容,以便我们可以消除/调查解决方案和原因?有几种可能性:1.每次插入后需要更新的复杂/多个索引(请考虑在插入期间禁用+之后重新创建)2.在每个插入行之后触发的插入触发器是否在事务中提交?例如=>OracleTransaction trans…cmd.ExecuteOnQuery();trans.Commit();trans.Dispose());该过程正在进行提交吗?谢谢,在文章的最后,提供了一些更详细的信息,但实际上没有索引,没有复杂的情况…只是尝试在没有事务的情况下了解问题是否存在,但当然我在现实世界中真的需要事务…另一个信息:在这个过程中,关键的方面似乎是CPU,这都是time在执行insert QUERY时100%打开。他有一个可能很大的blob。传输可能需要很多时间。谢谢,但实际上DB是一个普通的oracle XE(版本10),没有任何问题……我应该检查您对DB的看法吗?