OracleBulkCopy 给 BatchSize 和不给 BatchSize 有啥区别

Posted

技术标签:

【中文标题】OracleBulkCopy 给 BatchSize 和不给 BatchSize 有啥区别【英文标题】:What is the difference between giving BatchSize and not giving BatchSize for OracleBulkCopyOracleBulkCopy 给 BatchSize 和不给 BatchSize 有什么区别 【发布时间】:2012-12-09 15:30:51 【问题描述】:

谁能给出在OracleBulkCopy 中使用BatchSize 和不使用BatchSize 之间的性能和行为差异。目前我没有指定BatchSize。我的BatchSize 可能从 100 到 200000 不等。请提出最佳方法。

try

     var columnMapping =
         from table in orgTable.Columns.Cast<DataColumn>()
         select
             new OracleBulkCopyColumnMapping(table.ColumnName, table.ColumnName);
     using (var bulkcopy
         = new OracleBulkCopy(ConnectionString, OracleBulkCopyOptions.Default))
                         
         bulkcopy.DestinationTableName = GoldOrgTable;                                        
         foreach (var mapping in columnMapping)
             bulkcopy.ColumnMappings.Add(mapping);
         bulkcopy.BulkCopyTimeout = TimeOut.Value;
         bulkcopy.WriteToServer(orgTable);
         orgTable.Dispose();
     
     return true;

【问题讨论】:

【参考方案1】:

最佳batchsize应该设置在500~5000左右。

使用批量复制的优点是:

提高插入数据库的性能(减少所需时间) 即时操作大量插入(多行插入)

但它也有一些我们需要关注的缺点:

如果批量复制中有一行遇到错误,则更难排除故障 可能不知道数据的插入或截断是否存在某些数据类型整理或转换问题(unicode 和非 unicode),即使批量复制过程已成功完成,某些数据也可能未正确插入(脏数据)

您可以在以下网站上找到更多讨论: http://docs.oracle.com/html/E10927_01/OracleBulkCopyClass.htm#CHDCDEIA 或者 Bulk Insert to Oracle using .NET

【讨论】:

以上是关于OracleBulkCopy 给 BatchSize 和不给 BatchSize 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

OracleBulkCopy

如何通过 oracleBulkCopy (ODP.NET) 检查插入的行数

tensor求和( tensor.sum())

如何设置batchsize

Sql中如何给变量赋值

怎样给MFC 窗口命名?