SSIS数据流性能比较(ADO.NET vs. OLE DB vs. ODBC)

时间:2023-02-15 07:46:02

选择哪一种数据库连接方式,这个问题在开发者社区当中一直争论不休。

性能通常被视作首要的鉴别标准。一般来讲ADO.NET的性能不如ODBC与OLE DB,因为他是一个托管提供程序。但是由于大多数应用只进行增删改查操作,这种差异往往可以忽略不计。

然而,作为BI开发者,我们通常需要处理庞大的数据集。因此我们不能忽略任何微小的性能差异,尤其是在实现SSIS数据流任务时。


(原作者的测试方法省略,这里直接把测试结果搬上来)

Source Destination Records Data (MB) Elapsed Time (s)​​ MB/s
OLE DB ADO.NET 10,000,000 639.727 2:16.543 4.685
OLE DB ADO.NET 1,000,000 63.973 13.004 4.919
OLE DB ADO.NET 100,000 6.397​ 1.347  
OLE DB ADO.NET 10,000 0.640 0.265  
OLE DB OLE DB 10,000,000 639.727 43.394 14.742
OLE DB OLE DB 1,000,000 63.973 4.649 13.760
OLE DB OLE DB 100,000 6.397 0.577  
OLE DB OLE DB 10,000 0.640 0.156  

  • 测试结果发现,在读取大量数据行时,OLE DB Source速度大约是ADO.NET Source的2.5倍,大约是ODBC Source的3.8倍。
  • 当使用同样的OLE DB Source在SQL Server数据库之间转移大量数据时,OLE DB Destination 的速度大约是ADO.NET Destination 速度的3倍。
  • 尽管我选择了表加载-批处理(Table Load – Batch)的数据访问模式,ODBC Destination 仍旧是执行逐行插入(row-by-row inserts)。这对于操作大数据集是不可接受的。我需要进一步调查这个问题,以确定解决方案。
  • 我的数据源和目的地数据库,与SSIS服务器都配置在同一台服务器上。这样确保我的测试流程不受网络延迟或限制的影响。正因为这一点我的测试流程可以说是有争议的。我将尽可能地在更为真实的环境上重复这套测试。
  • 尽管测试结果的数字没有统计学意义,并且在测试流程上有着缺陷。但我认为该结果仍旧可以证明坊间的建议,OLE DB是构建SSIS数据流时的第一选择。

(原文链接: https://datatellblog.wordpress.com/2015/01/13/ssis-data-flows-ado-net-vs-ole-db-vs-odbc/ )



Source Destination Records Data (MB) Elapsed Time (s)​​ MB/s
OLE DB ADO.NET 10,000,000 639.727 2:16.543 4.685
OLE DB ADO.NET 1,000,000 63.973 13.004 4.919
OLE DB ADO.NET 100,000 6.397​ 1.347  
OLE DB ADO.NET 10,000 0.640 0.265  
OLE DB OLE DB 10,000,000 639.727 43.394 14.742
OLE DB OLE DB 1,000,000 63.973 4.649 13.760
OLE DB OLE DB 100,000 6.397 0.577  
OLE DB OLE DB 10,000 0.640 0.156