我的软件可以部署在两种不同的配置中:一种是我全天偶尔收到单个数据点的涓涓细流,另一种是我在一天结束时收到所有数据的转储。显然,对于日终转储,我将使用具有可配置批量大小的SqlBulkCopy()
命令。
但是,为了简单起见,我想通过将批量大小设置为1来在trickle-feed中使用相同的代码。这样做会产生很大的开销吗?我可以更好地进行单INSERT
次涓涓细流调用吗?
工作流程如下所示:
ICollection<MyClass> dataPoints = ...;
public void AddDataPoint(MyClass data)
{
dataPoints.Add(data);
if (dataPoints.Count >= ConfigurableBatchSize)
{
DoBulkCopy(dataPoints); // converts MyClass objects into rows of a DataTable, etc
}
}
答案 0 :(得分:3)
我在几年前的SQL最佳化SQL Server插入性能的SQL周六会话上运行了许多各种插入方法和大小的性能测试。使用单线程应用程序,单行参数化插件的速率约为每秒2,200次,而带有DataTable源的单行SqlBulkCopy约为500 /秒(服务器CPU时间的两倍)。您可以从sqlsaturday.com/154/schedule.aspx下载Power Point。