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

kyl*_*iod 7 database parallel-processing sqlbulkcopy azure azure-sql-database

我在云上有一个带有sql azure数据库的天蓝色应用程序.我有一个worker角色,需要对文件进行解析+处理(最多约3000万行),所以我不能直接使用BCP或SSIS.

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

我希望并行运行我的批量插入; 然而,阅读有关并行/控制锁行为导入数据的文章,它说SqlBulkCopy要求表没有聚簇索引,并且需要指定表锁(BU锁).但是,azure表必须具有聚簇索引...

甚至可以在SQL Azure中的同一个表上并行使用SqlBulkCopy吗?如果没有,那么还有另一个API(我可以在代码中使用)吗?

Mat*_*ren 5

我看不出如何比使用 SqlBulkCopy 运行得更快。在我们的项目中,我们可以在大约 3 分钟内导入 250K 行,所以您的速度似乎是正确的。

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

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

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

  • 我最终并行插入临时表,然后从这些临时表插入主表(串行)。这对我来说似乎要快得多,因为从临时表插入大约 200 万行需要大约 4-5 分钟。 (4认同)