5

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

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

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

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

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

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

4

1 回答 1

1

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

使用类的InitialLOBFetchSize属性OracleCommand(在 ODP.NET 中,请参阅文档),您可以告诉 Oracle 在初始检索行时检索 LOB 的一部分。如果您的 LOB 不是太长,这会产生很大的不同。

于 2012-01-12T16:13:04.163 回答