sqlbulkcopy mysql_SqlBulkCopy 的 Timeout 和 BatchSize
在測試中發現 SqlBulkCopy 在數據量大的時候會出現超時報錯。
Timeout expired with SqlBulkCopy
...
There are two ways to fix this error:
1) Increase Timeout by default it is 30 second
sqlBulkCopy.BulkCopyTimeout = {time in seconds}
2) Decrease BatchSize by default it try to insert all rows in one batch
sqlBulkCopy.BatchSize ?= {no of rows you want to insert at once}
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx
說得很清楚。BulkCopyTimeout 的缺省值為 30 秒,這樣處理數據量大了容易發生超時。碰巧 BatchSize 的缺省值為 0,意思是會把所有操作塞到一輪中處理,這樣更加劇了一輪處理所耗費的時間長度。解決辦法就是修改上述兩個量中的一個即可。比如 batch 尺寸變小了,每輪的時間也就縮短了。
那么每輪處理多少量合適呢?這涉及到性能問題:
What is the recommended batch size for SqlBulkCopy?
...
Given this scenario, I found a batch size of 5,000 to be the best compromise of speed and memory consumption. I started with 500 and experimented with larger. I found 5000 to be 2.5x faster, on average, than 500. Inserting the 6 million rows takes about 30 seconds with a batch size of 5,000 and about 80 seconds with batch size of 500.
...
I found that 500 was the optimal value for my application. The 500 value for SqlBulkCopy.BatchSize is also recommended here.
總結
以上是生活随笔為你收集整理的sqlbulkcopy mysql_SqlBulkCopy 的 Timeout 和 BatchSize的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对象的类型转换_Java对象的类
- 下一篇: mysql索引碎片产生原因_解析mysq