如何提高Oracle BLOB列读取网络的性能?

时间:2017-08-21 21:28:22

标签: .net oracle performance networking blob

我正在使用C#比较Sql Server和Oracle的读取性能。基本上,我正在使用ADO.NET和ODP.NET并在两者上获得类似的值,除非我在分布式机器上读取BLOB列(一台机器请求另一台机器上的数据库)。

重要说明:

  • 在本地测试时,结果甚至是Sql和Oracle。
  • 机器之间的延迟为“<1ms”

在我的测试中,所有数据完全相同,我正在读取2881行,每行有一些二进制数据。获得的结果是:

  • 本地Sql Server:1.6s
  • 本地Oracle:1.8s(结果很好)
  • 分发的Sql Server:1.8s
  • Oracle分布式:10.0s(问题在这里!)

我已经在Oracle上使用的配置表现更好:

  1. OracleCommand.InitialLOBFetchSize = -1;(尝试了其他正值,但效果最差)
  2. OracleCommand.InitialLONGFetchSize = -1;(尝试了其他正值,但效果最差)
  3. OracleReader.FetchSize = OracleReader.RowSize * 10000;(在第一个Read()之前设置)
  4. 所以问题是:

    • 在阅读BLOB列时,还有其他任何我缺少的配置可以获得更好的性能吗?

    其他说明:

    • 我认为考虑到低延迟,InitialLOBFetchSize = -1会改善这种情况,但没有太大改善(InitialLOBFetchSize = 0时间为〜12.8s)。
    • 已经在Oracle实例上尝试了一些网络改进配置,但没有表达结果
    • 使用Oracle.DataAccess.dll x64 v4.121.2.0
    • 尝试使用托管和非托管Oracle驱动程序,使用非托管版本(我从一开始就使用的那个)获得更好的结果

    参考文献:

0 个答案:

没有答案