gpt4 book ai didi

c# - 影响插入的 bulkcopy 批量大小

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:42 24 4
gpt4 key购买 nike

我正在使用 SqlBulkCopy 将包含一百万条记录(每条记录大约有 10 列)的 datatable 的内容插入到数据库表中。当我更改批量大小属性 (bulkCopy.BatchSize) 时,我在批量复制期间看到一些不稳定的值。

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn.ConnectionString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction | SqlBulkCopyOptions.CheckConstraints))
{
bulkCopy.DestinationTableName = destinationTableName;
bulkCopy.BatchSize = 100000;
bulkCopy.BulkCopyTimeout = 1800;
if (matchingColumns != null || matchingColumns.Count > 0)
foreach (KeyValuePair<string, string> kv in matchingColumns)
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(kv.Key, kv.Value));
bulkCopy.WriteToServer(dt);
}

当我不使用批量大小时,该过程在 7 分钟内完成。然后我将批量大小设置为 100,000,时间大约是 5:30然后我将它设置为 50,000,时间增加到 10 分钟。

我想知道批量大小对 INSERT 速度的影响。一般来说,它会使事情变快还是变慢?

最佳答案

看看这份广泛测试批量大小的白皮书:

SQLBulkCopyPerformance

里面有很多关于使用不同批量大小的网络利用率等的数据,但结论如下:

We did not find anything mentioned in the Books OnLine nor have we ever seen anything interesting during our experience, this lead us to say that the best thing to do with BatchSize is to leave it to zero, which is its default value, since any value different from that will decrease the performance of the load process

这似乎与您的测试一致。

编辑:

每当我过去使用 SqlBulkCopy 时,我都倾向于通过多次插入来自己控制批处理大小,然后仅通过 NotifyAfter 属性和 SqlRowsCopied 事件在复制过程中获取进度更新。

关于c# - 影响插入的 bulkcopy 批量大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28275779/

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