首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SqlBulkCopy和Azure进行并行批量插入

使用SqlBulkCopy和Azure进行并行批量插入
EN

Stack Overflow用户
提问于 2012-03-01 23:55:06
回答 2查看 4.8K关注 0票数 7

我在云上有一个带有sql azure数据库的azure应用程序。我有一个worker角色,需要在一个文件(最多3000万行)上执行parsing+processing,所以我不能直接使用BCP或SSIS。

我目前正在使用SqlBulkCopy,但是这似乎太慢了,因为我已经看到400k行的加载时间长达4-5分钟。

我想并行运行我的批量插入;然而,在阅读有关并行导入数据/控制锁行为的文章时,它指出SqlBulkCopy要求表没有聚集索引,并且需要指定一个表锁(BU锁)。然而,azure表必须有一个聚集索引...

在SQL Azure中是否可以在同一个表上并行使用SqlBulkCopy?如果没有,有没有其他API (我可以在代码中使用)来做这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-02 18:14:03

我不明白你怎么能比使用SqlBulkCopy运行得更快。在我们的项目中,我们可以在大约3分钟内导入25万行,因此您的速度似乎是正确的。

我不认为并行做会有帮助,即使这在技术上是可行的。我们一次只运行一次导入,否则SQL Azure会开始让我们的请求超时。

实际上,有时在导入时同时运行大型group-by查询是不可能的。SQL Azure做了大量工作来确保服务质量,这包括超时太长时间的请求,占用太多资源等

因此,同时执行多个大容量插入可能会导致其中一个超时。

票数 5
EN

Stack Overflow用户

发布于 2012-03-05 23:12:31

可以在SQL Azure上并行运行SQLBulkCopy,即使您加载的是相同的表。在将记录发送到SQLBulkCopy接口之前,您需要自己批量准备记录。这绝对有助于提高性能,并且当您由于您自己的工作之外的原因而受到限制时,它允许您控制较小批量记录的重试操作。

看一下我的blog post,它比较了不同方法的加载时间。还有一个示例代码。在单独的测试中,我能够将一个表的加载时间减半。

这是我在几个工具(Enzo备份;Enzo数据复制)中使用的技术;这不是一件简单的事情,但如果处理得当,您可以显着优化加载时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9519402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档