gpt4 book ai didi

c# - 如何使用 Azure SQL 提高 SqlBulkCopy 性能

转载 作者:行者123 更新时间:2023-12-03 02:02:22 26 4
gpt4 key购买 nike

当我在本地数据库上运行程序插入 100,000 条记录时。导入大约需要 2 秒。切换到 Azure SQL 后,时间随着 DTU 百分比的增加而增加。

这是我的代码

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
connection.Open();

var transaction = connection.BeginTransaction();
using (var sqlBulk = new SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, transaction))
{
// SET BatchSize value.
sqlBulk.BatchSize = 150000;
sqlBulk.BulkCopyTimeout = 60;
sqlBulk.DestinationTableName = "Master_Transaction";
sqlBulk.WriteToServer(dataTable);

transaction.Commit();
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Console.WriteLine($"database running time {ts}");
}

测试结果后,我使用 DTU 购买的计划对 Azure SQL 进行测试

  • 10 DTU 37 秒
  • 20 DTU 24 秒
  • 50 DTU 18 秒
  • 100 DTU 15 秒

甚至运行时间也减少了。 avg_log_write_percent仍然很高,DTU也很高,如下图: enter image description here enter image description here

我的问题是

  • 如何使用 Azure SQL 提高 SqlBulkCopy 的性能?
    • 通过修复代码程序
    • 通过配置 Azure 资源
  • 我可以降低 DTU 最大值并减少 avg_log_write_percent 吗?

注释

  • 表有聚集索引键

最佳答案

您在测试中使用的所有服务层都基于远程存储(S0 到 S3),这意味着您可能会看到 IO 密集型任务的性能下降。同时,高级层基于本地连接的 SSD 存储,可提供比基本/标准层更高的 IOPS 和吞吐量。

除了 S0 到 S3 层的存储相关限制之外,在所有这些层上,查询计划都是序列化的,所有查询都以最大并行度 = 1 执行。不要指望在 IO 和 CPU 密集型任务上有良好的性能这些服务级别。

关于c# - 如何使用 Azure SQL 提高 SqlBulkCopy 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75721227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com