小编Adr*_*own的帖子

OracleBulkCopy与SQL*Loader性能

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

我在Oracle中有一个非常基本的表,有三列(一个BINARY_FLOAT,两个NUMBER(18,0)).没有主键,索引,触发器等.它用作临时表以将批量数据传入DB.

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

OracleBulkCopy大约需要10分钟才能加载100万行.

OracleBulkCopy,根据文档,*"...使用直接路径加载方法,它与Oracle SQL*Loader类似,但不一样."*在性能方面可能没有SQL*Loader ,但这种差异是荒谬的.

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

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

OracleBulkCopy发送一系列102字节数据包(TNS协议)并接收133字节数据包(TNS协议)作为响应.什么......!?它就像是一次发送一行!

使用OracleBulkCopy类,我使用批量大小为100,000并使用自定义IDataReader从数据文件中读取.

所以,我的问题是:

  • 有没有人见过这种行为?

  • OracleBulkCopy实际上是否作为批量加​​载工具执行?

  • 有什么我需要配置,以使其正常工作?(客户端/服务器设置等)

任何帮助深表感谢.

.net oracle odp.net sql-loader

8
推荐指数
1
解决办法
2395
查看次数

标签 统计

.net ×1

odp.net ×1

oracle ×1

sql-loader ×1