托管和非托管 Oracle ODP.Net 驱动程序之间是否有任何性能基准?
(即,除了架构/部署简单性之外,迁移到托管驱动程序有什么好处)
我想分享一些结果。我认为与易于部署相比,性能的小小不足是值得的。
注:seg
表示秒。对于那个很抱歉。
当然这只是一个简单的测试,还有连接池、稳定性、可靠性等几个话题没有涉及……
值得一提的是,这些场景执行了 100 次。因此,时间量是 100 次执行的平均值。
快速入门视频中的项目符号:
我不确定性能,但我怀疑这两种方式都会有很大不同。我的猜测是这两个驱动程序通过“Oracle Net”以相同的方式进行通信。尽管为准备命令和处理结果而执行的内存客户端操作可能存在细微差别,但这种开销通常仅代表相对于整个事务的一小部分时间。大部分成本/时间都花在服务器上的物理 IO 上,并将数据传输回客户端。这与使用 oledb 提供程序或 System.DataAccess.OracleClient 驱动程序完全不同。这是同一家 RDBMS 公司的另一个版本 - 他们将利用其他客户使用的所有相同性能技巧。我希望我可以发布一项研究,但我猜这样的事情不会 t 存在,因为最终它会变得不起眼。没有消息的情况是好消息——如果新的提供商在某种程度上更糟,你会读到它。
简单是切换到这个 IMO 的充分理由。绝大多数开发人员和管理员并不完全了解提供程序及其与非托管客户端的关系。关于 oracle home 偏好、版本不匹配、升级等的困惑不断出现。消除这些问题将是一个可喜的变化。
更简单的部署和位独立性确实是不错的好处,但您应该彻底评估您的典型驱动程序使用情况。在 64 位进程中使用新的托管驱动程序时,我面临近 50% 的性能障碍。其他人在 Oracle 论坛上报告内存泄漏等:https ://forums.oracle.com/community/developer/english/oracle_database/windows_and_.net/odp.net 。看起来它是一种典型的甲骨文有缺陷的产品,需要几个月/几年的时间才能安定下来:/
请记住,尚不支持自定义类型。这可能是不切换到托管驱动程序的原因。
有关托管版本和非托管版本之间的差异,请参阅此 Oracle 文档:
http://docs.oracle.com/cd/E16655_01/win.121/e17732/intro004.htm