3

在我收到“您尝试过 ODP.net 吗?”之前 答案,是的,我有并且现在正在使用它。

我正在将数据从 oracle 移动到 sql server(不重要),并且在 oracle 连接上使用数据读取器。较大的表正在爬行。有时糟糕到每秒 10 条记录。当我注意到性能问题时,我将源代码缩减为仅对整个表进行简单的 Reader.Read() 调用,因此没有其他任何东西会减慢它的速度。我已经尝试过 MS 和 Oracle ODP .net 客户端。我目前正在使用 11g Instant Client、win7 64bit 上的 64bit、8 gigs ram 和所有好东西。我在本地网络上使用过,目前在VPN上,性能基本相同。我已经调整了 Prefetch 大小,但没有结果。

我可以在 Oracle Sql DEveloper 工具中运行导出数据功能,并在同一台机器上,通过同一网络,以大约 100 倍的速度导出整个数据库的所有数据。

我可以将我的 .net 应用程序复制到 oracle 服务器并在其上运行相同的性能测试,不到一秒就完成了。

因此,不是网络本身变慢,也不是数据量(如 SqlDeveloper 导出所示),不是 .net 代码本身,也不是 oracle db(如在服务器上运行所示),所以它必须是在任何网络上使用的 Datareader 的某种组合。

是我的即时客户端安装吗?成熟的客户端性能更好吗?64位客户端搞砸了?真是不知所措。

更新:

从那以后,我运行相同的应用程序,编译为 32 位,并在安装了“完整”oracle 客户端(显然是 32 位版本)的 windows xp 虚拟 pc 实例上运行。即使虚拟机的性能有所降低,它的运行速度仍然快了近 10 倍。因此,Instant 客户端肯定存在某种问题,而我的猜测是 64 位 Instant Client。确认这一点的最后一个测试是在同一台机器上安装一个 32 位即时客户端并再次运行它。如果我能找到时间...

4

4 回答 4

0

boomhauer:你查到真相了吗?我遇到了类似的问题。通过玩 Fetchsizes,我确实得到了一点提升。在比 prod 小几个数量级的测试环境中,我在 ODP.net 中看到 1.8 秒,在 System.Data.OracleClient 中看到 0.2 秒。通过提高 fetchsizes,我能得到的最好结果是 1.6 秒。

于 2011-10-10T18:05:14.113 回答
0

尝试增加 Fetch Size。也就是说,ODP.net 为实际获取数据而必须进行的往返次数越少,网络上的性能就越好。(请注意,如果您启用了连接池,AFAIK 会自动完成。)

于 2011-07-19T14:08:23.470 回答
0

“我可以将我的 .net 应用程序复制到 oracle 服务器并在其上运行相同的性能测试,不到一秒就完成了。”

这是您解决方案的根源。同一个应用程序,测试中的一个受控元素,从一个位置移动到另一个位置,唯一改变的变量是网络。那么我们有两种可能。可能性之一是网络本身就是问题,它太慢了。第二个是应用程序及其与网络的交互方式与其性能是对立的。

当然,服务器上的执行与您在 VPN 上的位置之间存在偏差。使用服务器上的导出功能(尽可能接近原始访问)应该允许您根据在 VPN 连接主机上执行相同操作所需的时间长度差异来测量网络方差分量。

但是,正如您所指出的,这不能解释整个时间差。应用程序可能对 WAN 不友好。这通常意味着发送和接收信息需要太多轮次,并且每个数据流中的信息量可能非常大,超过所需的量。从批量导出到应用程序的底层握手机制可能完全不同。一个可能一次请求 100 条记录,而另一个可能会按顺序提取每条记录(注意您的速度差异为 100:1)。一次对单个记录拉取的持续应用到数据库握手很可能会大大增加您的开销并导致吞吐量下降。

于 2011-07-19T12:55:35.797 回答
0

我遇到了与此类似的问题,但它是间歇性的。我有一个 Oracle 查询,通常运行大约需要 1 秒,但有时在午餐时间使用 .Net 运行需要 30 秒。如果此时我在同一台机器上使用 Oracle SQL Developer 运行它,仍然需要 1 秒。

这个问题每天只持续大约 10 分钟。此外,我的同事在完全相同的时间遇到​​了同样的问题,并且同时消失了。

所以看起来它可能是网络和 .Net Oracle 驱动程序的组合,但我不知道如何找到它。此外,此时其他 SQL 查询的执行速度并不慢,只有一个特定的查询只返回 1200 行。

编辑:我发现另一位同事在减速时正在通过网络复制大文件。为了证明这一点,我让他再做一次,同样的事情发生了——但在 Oracle SQL Developer 中查询仍然很快。所以它是网络和 .Net Oracle 驱动程序的组合。我正在使用 64 位 BTW。

于 2014-06-19T13:31:41.200 回答