【问题标题】:SQL Azure delayed response every 10 secondsSQL Azure 每 10 秒延迟一次响应
【发布时间】: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


【解决方案1】:

SQL Azure 通常会以这种方式运行并没有特别的原因。但是,当您看到这样的情况时,我建议您首先将客户端逻辑和客户端驱动程序/网络与服务器上发生的逻辑分开。因此,在这种情况下,您可能会创建一个存储过程,它在您的程序中执行与循环等效的操作,并尝试在服务器上运行它并计时。它应该在不涉及这些其他部分的情况下为您提供一些数据。

您的另一个选择是查看查询存储(它将为您提供服务器上查询执行时间的摘要数据,而不是跟踪级别数据,但它会为您提供 min/max/last/avg/stdev每个指标)。这应该为您提供另一个数据点来评估这是来自服务器端还是客户端/应用程序端。 https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-2017

另一个选项是启用设置“统计时间开启”以执行您的查询 - 这将为您提供一组额外的数据,您可以在客户端驱动程序中检索有关服务器用于处理您的查询的资源数量。

问题的一个可能原因是服务器上的数据存在偏差 - 换句话说,如果表中的 10 比其他值多得多。在这种情况下,您必须检索更多值,这可能会导致查询响应时间出现差异。

最后,您可以使用 XEvents 来跟踪每个查询的执行时间(虽然这需要在 SQL Azure 上进行一些设置,但可以将查询的事件跟踪转储到 blob 存储中,以便您可以查看服务器认为它使用了多少时间)。

我希望这能给你一些东西来尝试追查你的神秘面纱。

【讨论】:

    【解决方案2】:

    感谢大家的回复,对于延迟的答复深表歉意。

    我已经找到了这个问题的原因,它与 SQL Azure 或任何其他 Azure 服务无关。

    问题出在我的设备本地,罪魁祸首是我用来将文档同步到 Google Drive 的 Google Drive Stream 客户端。使用“ping -t”进行测试,我每 10 秒得到 2 秒的非常稳定的延迟。禁用 Google Drive Stream,ping 一直很快。重新启用 Google Drive Stream,延迟又回来了。

    现在开始了解如何无延迟地继续使用文件流。

    TGM

    【讨论】:

      猜你喜欢
      • 2012-01-08
      • 2019-10-25
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多