【发布时间】:2018-05-15 08:47:44
【问题描述】:
我们有一个位于 S1 定价层的 Azure SQL 数据库。我们的站点被大量缓存,因此数据库命中率绝对是最低的。平均 DTU 使用率仅为约 1.5%,这非常好,因为我们的数据库成本只是旧网站上的一小部分(20 英镑/月对 400 英镑/月!)
然而,在网站上,我们确实有需要插入大约 10 万条记录的小脚本(用户执行操作时的通知,例如创建新教程)。
触发后,DTU 在 3-5 分钟内达到 100% 峰值。
脚本只是一个调用插入的循环:
using(var db = new DBContext())
{
foreach(var userID in userIDs)
{
db.ExecuteCommand(
"INSERT INTO UserNotifications " +
"(ForUserID, Date, ForObjectTypeID, ForObjectID, TypeID, Count, MetaData1)
VALUES ({0}, {1}, NULL, {2}, {3}, {4}, {5}, {6})",
userID, DateTime.Now.ToUniversalTime(), forObjectID, (byte)type, 1, metaData1.Value
);
}
}
- 还有比这更快的插入方法吗?
- 此外,减慢此脚本执行速度的最佳方法是什么,这样 DTU 的使用才不会阻塞所有内容?
【问题讨论】:
-
我很困惑。您想要一种更快的插入方式,但又想减慢执行速度?
-
@Nkosi:Op 希望查询不要使用整个 DTU
-
我不确定,如果您的查询并行运行,如果您的查询并行运行,您最终可能会使用更多资源,您可以尝试在插入期间将 mdop 更改为 1 以查看您的DTU消耗降低
ALTER DATABASE SCOPED CONFIGURATION -
也可以看到这个答案:stackoverflow.com/questions/5940225/…
-
抱歉,澄清一下,我想知道是否有办法加快插入性能,以及降低执行速度的最佳方法是确保不会消耗所有 DTU
标签: asp.net sql-server azure-sql-database bulkinsert