在.Net中从Oracle获取clob字段的性能不佳

时间:2012-01-12 16:00:24

标签: .net oracle odp.net clob devart

我正在尝试从.Net中的oracle读取clob列,并观察到非常差的性能和大量的网络流量。

我尝试过ODP + OCI,devArt + OCI方式来访问具有相同结果的数据 - 在数据读取器中获取1000行需要大约20秒,并读取每行的clob值。

检查wireshark跟踪,事实证明每次我尝试读取读取器中单行的clob字段时,在客户端和服务器之间发送了额外的多个tcp数据包。因此,对于1000行,这比查询一行慢1000倍。

同时,如果我在SQL Developer中运行相同的查询(我相信使用瘦jdbc驱动程序而不是oci),我会立即得到结果,包括clob值。它不会尝试查询每行的clob - 它可以一次性获取它们!

但我没有看到.net的瘦客户端。我怎样才能加快速度?请帮忙!

编辑:我的字段类型实际上是XMLTYPE存储为clob,而不是真正的clob。在它上面使用getClobVal可以将结果提高50%到10秒(1000行)。但与此同时,Sql Developer立即返回结果,而不是10秒钟。

1 个答案:

答案 0 :(得分:1)

您已正确观察到Oracle延迟了LOB的检索。因此,您的应用程序的性能受到网络往返时间的限制。

使用InitialLOBFetchSize类的OracleCommand属性(在ODP.NET中,请参阅documentation),您可以通过初始检索行来告诉Oracle检索部分LOB 。如果你的LOB不长,这可能会产生很大的不同。