Oracle ODP.net 管理驱动程序与非托管驱动程序的区别

38

是否有托管和非托管Oracle ODP.Net驱动程序之间的性能基准测试?

(例如,除了简化架构/部署之外,使用托管驱动程序还有什么优势吗?)


不,也没有从我在OTN留言板上提出的类似问题中得到答案。我基本上得出结论,12.1未经管理的驱动程序本质上仍然是一个测试产品,我会等到12.2再重新评估它。 - John Fedak
5个回答

29

我想分享一些结果。我认为与部署的简易性相比,小小的性能不足是值得的。

输入图像描述

注: seg 表示秒。非常抱歉。

当然,这只是一个简单的测试,还有一些主题没有涵盖,如连接池、稳定性、可靠性等等……

值得一提的是,这些场景执行了100次。因此时间数量是这100次执行的平均值。


抱歉,我们不再使用32位版本。但是,如果您搜索非托管x64和非托管x32版本之间的比较,您将得到答案:)。 - gustavodidomenico
嗨,Gustavo,我目前正在进行自己的性能测试,你用了什么工具来得出你的数据? - Ciaran Gallagher
@CiaranGallagher,只是一个带有XUnit测试的类库,使用基本数据库类(OracleConnection、OracleCommand等)。 - gustavodidomenico
@gustavodidomenico 在托管和非托管列下,“seg”是什么?秒数吗? - Tony L.
是的,对此我感到抱歉。 - gustavodidomenico

25

来自快速入门视频的要点:

  • 更少的文件(最多1或2个dll)
  • 更小的占用空间(10 MB与200 MB相比)
  • 更容易进行并列部署
  • 32位和64位使用相同的程序集(第二个MTS程序集除外)
  • 代码访问安全
我不确定性能问题,但我怀疑两种驱动程序都通过"Oracle Net"以相同的方式进行通信。虽然在准备命令并处理结果的内存客户端操作中可能会有轻微差异,但这种开销通常仅占整个事务时间的一小部分。大部分成本/时间都花费在服务器上的物理IO和将数据传输回客户端上。这与从oledb提供程序或System.DataAccess.OracleClient驱动程序转换是不同的。这是来自同一RDBMS公司的又一个版本-他们将利用所有其它客户端使用的性能技巧。我希望我能发布一份研究报告,但我猜这样的东西不存在,因为最终它会是不值一提的。没有新闻就是好消息-如果新的提供程序某种方式更差,你就会看到相关报道。
在我看来,简单易用就足够理由去切换到这个提供程序。绝大多数开发人员和管理员并不完全了解提供程序及其与非托管客户端的关系。关于oracle home偏好、版本不匹配、升级等方面的疑问经常出现。消除这些问题将是一个受欢迎的改变。

是的,我理解所有这些- 但这个问题特别关注驱动程序的相对性能。 - John Fedak
我会编辑我的答案,以阐述“much different either way”的含义。 - b_levitt

12

这里有一个需要注意的问题,花费了我几周时间才发现为什么 Oracle 管理的驱动程序无法使用 ef6 进行连接。如果您的数据库具有以下数据完整性算法,则必须使用非托管的驱动程序!!

在 Oracle 文档中深处埋藏着这个信息!!!谢谢 Oracle !!!进入图像描述


3

还有其他人遇到过这个问题吗? - Ciaran Gallagher

2

2
其他答案没有提到的一件事:随着每个ODP.NET的主要版本发布,非托管驱动程序通常会有一些新的数据库功能,而托管驱动程序尚未具备。但是在随后的版本中,托管驱动程序将会追赶上来。 - Christian Shay
1
@ChristianShay,这似乎不是一个非常准确的说法,因为Oracle多年来一直未能将托管客户端带入平衡状态。https://docs.oracle.com/database/121/ODPNT/intro004.htm#ODPNT8146 - EKW
你好 EKW - 你说得对。虽然我们的长期目标是实现功能平衡,但并没有保证。ODP 管理功能取决于需求 - 目前很少有人要求缺失的功能,其他事情正在优先考虑 -- ODP.NET Core 就是一个例子。你可以在这里投票支持你认为重要的功能: http://apex.oracle.com/pls/apex/f?p=18357:46 - Christian Shay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接