【发布时间】:2019-02-04 02:33:37
【问题描述】:
我们正在针对 SQL Azure 运行多个 Azure Web 应用程序(.NET Core、MVC4、MVC5)。每隔 10 秒,SQL 服务器的响应就会出现相当长的延迟。我们已经使用一个控制台应用程序测试了这一点,该应用程序循环相同的查询 100 次,无论我们何时启动控制台应用程序,延迟恰好每 10 秒发生一次。
查询通常需要 150 毫秒才能完成。每 10 秒需要 2-3 秒。
测试和生产数据库服务器上的行为是相同的。我们使用了一些触发器 (5),它们都不是由负载测试中使用的查询触发的。
负载测试是一个带有简单选择查询的存储过程。在我们运行这些测试时,没有其他用户在使用我们的测试环境。
我们还使用 Azure 门户中的性能测试工具对此进行了负载测试,结果相同。
有什么想法可以从哪里开始寻找造成这种延迟的根本原因?
我们的测试代码:
private static void Main(string[] args)
{
var ss = new Stopwatch();
// Let's go
using (SqlConnection connection = new SqlConnection(connectionString))
{
for (var i = 0; i < 100; i++)
{
ss.Restart();
connection.Open();
var sql = "EXEC usp_loadTestSp";
using (SqlCommand command = new SqlCommand(sql, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
Console.WriteLine($"Current time {i}: {DateTime.UtcNow}");
}
}
connection.Close();
Console.WriteLine($"Loop time {i}: {ss.ElapsedMilliseconds}");
}
}
EndApp();
}
更新:
刚刚在 Azure 上使用新的空白 SQL 数据库创建了一个新的 SQL 服务器。没有桌子,什么都没有。更新了测试应用程序中的连接字符串,将查询更改为SELECT NULL。同样的结果,每10秒一次需要更长的时间......
【问题讨论】:
-
你试过增加SQL实例DTU吗?
-
Every 10 seconds it will take 2-3 seconds.2-3 秒开始时i的值是多少。在末尾?这是否可重现(即它可能与迭代次数而不是时间窗口有关)? -
@MikeMiller 是的。 test db (50 DTUs) 和 prod db (500 DTUs Premium) 的行为是相同的。
-
垃圾收集器在做什么?
-
如果不是专有的,可能值得发布 usp_loadTestSp。有趣的是看看它是否可重现。
标签: c# sql .net azure azure-sql-database