gpt4 book ai didi

.net - OracleBulkCopy 与 SQL*Loader 性能对比

转载 作者:行者123 更新时间:2023-12-04 08:37:14 27 4
gpt4 key购买 nike

当 Oracle 服务器位于另一台计算机上时,我发现 OracleBulkCopy (ODP.NET) 和 SQL*Loader 之间存在一些显着的性能差异。

我在 Oracle 中有一个非常基本的表,其中包含三列(一个 BINARY_FLOAT,两个 NUMBER(18,0))。没有主键、索引、触发器等。它用作临时表将批量数据获取到数据库中。

SQL*Loader 将 450 万行加载到表中大约需要 27 秒。

OracleBulkCopy 只需大约 10 分钟即可加载 100 万行。

OracleBulkCopy,根据文档,*"...使用直接路径加载方法,这与 Oracle SQL*Loader 相似但不同。"* 就性能而言,它可能与 SQL*Loader 不一样,但这种差异是荒谬的。

在对网络流量进行一些基本分析后,我发现 OracleBulkCopy 正在发送和接收大量小数据包。我使用 Wireshark 比较了每个数据包,发现了一些有趣的结果。

SQL*Loader - 在初始连接握手之后 - 发送一系列 8 KB 数据包(TNS 协议(protocol))并接收 60 字节 ACK 作为回应。

OracleBulkCopy 发送一系列 102字节数据包(TNS 协议(protocol))并接收 133字节数据包(TNS 协议(protocol))作为响应。什么……!?就像一次发送一排一样!

对于 OracleBulkCopy 类,我使用 100,000 的批处理大小,并使用自定义 IDataReader 从数据文件中读取。

所以,我的问题是:

  • 有没有人见过这种行为?
  • OracleBulkCopy 是否实际上作为批量加​​载工具执行?
  • 我需要配置什么才能使其正常工作吗? (客户端/服务器设置等)

  • 任何帮助深表感谢。

    最佳答案

    我收到了甲骨文产品经理 Alex Keh 的回复,甲骨文“也注意到了这个问题。我们正在评估如何修复这个错误。”

    所以在回答我自己的问题时,我猜 OracleBulkCopy 确实 不是 作为批量加​​载工具表现良好。至少目前不是。

    我将包装 SQL*Loader 作为替代解决方案,因为错误修复中没有 ETA。

    关于.net - OracleBulkCopy 与 SQL*Loader 性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106366/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com