首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓慢批量插入Azure数据库

问缓慢批量插入Azure数据库
EN

Stack Overflow用户
提问于 2021-10-26 09:47:14
回答 1查看 509关注 0票数 0

我们在Azure中运行一个弹性池,运行多个数据库,当运行一个较大的导入时,这似乎比我们习惯的时间要长。在这些导入过程中,我们运行了6个核作为测试。所有数据库都允许使用所有核心。

在我们的本地环境中,它每秒插入大约100 k记录,但是Azure上相同的数据集每秒执行大约1k /秒(我们的vm)到4k /秒(开发笔记本电脑)。

在此插入过程中,数据库只使用14%的日志IO、5%的CPU和0%的DataIO。在P2中使用DTU模型建立一个新的数据库时,我们注意到了同样的经验。,所以我们甚至没有达到数据库的极限。

该表包含大约36列,这些列都是必需的。

我们已经使用BulkInsert使用了以下方法,使用不同的批次大小

代码语言:javascript
复制
BulkConfig b = new BulkConfig();
b.BatchSize = 100000;
await dbcontext.BulkInsertAsync(entities, b);

以及使用使用较小批的标准EntityFramework加载项。我们甚至使用了手工编写的SqlBulkCopy方法,但是都没有骰子。

现在的问题主要是,这是一个软件问题吗?我们在AzureDB中遇到问题了吗?我们需要改变大宗进口的方式吗?

编辑:

尝试使用TempDB设置在BulkInsert中运行导入,但这也不会提高性能。LogIO仍在14%。

EN

回答 1

Stack Overflow用户

发布于 2021-10-27 11:34:30

  1. 迭代应用程序层上的数据集,为每一行调用一个存储过程,该存储过程将根据具有特定键的记录的存在执行插入/更新操作。如果要插入的记录数量有限,则此策略可能运行良好;否则,往返和日志写入将对速度产生重大影响。
  2. 要尽量减少往返、日志写入和提高吞吐量,请使用批量插入方法(如ADO.NET中的ADO.NET类)将完整数据集上载到Azure SQL数据库,然后在单个批处理中执行所有插入/更新(或合并)操作。使用这种方法可以将整个执行时间从小时缩短到分钟/秒。

下面是与相同场景相关的讨论:优化Azure SQL数据库大容量更新方案- 链接。

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

https://stackoverflow.com/questions/69720868

复制
相关文章

相似问题

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