2014-09-24 28 views
0

我的軟件可以用兩種不同的配置進行部署:一種是在一天中偶爾接收單點數據點的滴漏式輸入,另一種是在一天結束時收到所有數據轉儲的另一種配置。顯然,對於日終的轉儲,我將使用帶有可配置批量大小的SqlBulkCopy()命令。單個記錄上的SqlBulkCopy?

但是,爲了簡單起見,我想通過將批處理大小設置爲1來在滴流中使用相同的代碼。這樣做是否會產生很大的開銷?我會做更好的單一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 
    } 
} 
+1

大容量複製與1條記錄以及它與1000. – paqogomez 2014-09-24 21:52:36

回答

2

你會坐火車到街角的雜貨店?您可以使用批量複製來偶爾進行單行插入,但是如果單行是規則而不是異常,那麼我建議您不要這樣做,因爲這似乎是您的使用案例。也就是說,如果插入物很少,你可能根本不會注意到開銷。您想要避免的主要問題是連續批量的單行批次。

幾年前,我在一個SQL週六的會議上對最大化SQL Server插入性能進行了各種插入方法和大小的性能測試。使用單線程應用程序時,單行參數化插入的速率達到每秒約2,200個,而帶DataTable源的單行SqlBulkCopy約爲500 /秒(服務器CPU時間加倍)。您可以從sqlsaturday.com/154/schedule.aspx下載Power Point。

+0

非常坦率地說,如果它是一樣容易,我會乘坐火車。我瞭解搭乘火車到雜貨店的開銷,但我不明白大容量拷貝的開銷。直覺上,似乎會有開銷,但我試圖找出「存在多少」以及存在哪些缺點。 – djs 2014-09-25 19:27:56

+0

@djs,我在幾年前SQL最大化插入性能的SQL週六會議上運行了各種插入方法和大小的許多性能測試。使用單線程應用程序時,單行參數化插入的速率達到每秒約2,200個,而帶DataTable源的單行SqlBulkCopy約爲500 /秒(服務器CPU時間加倍)。您可以從http://www.sqlsaturday.com/154/schedule.aspx下載Power Point – 2014-09-26 00:26:20

相關問題