C# SQL Azure每10秒延迟一次响应

C# SQL Azure每10秒延迟一次响应,c#,sql,.net,azure,azure-sql-database,C#,Sql,.net,Azure,Azure Sql Database,我们正在运行几个针对SQL Azure的Azure web应用程序(.NET核心、MVC4、MVC5)。每10秒,SQL server的响应就会有相当大的延迟。我们已经使用一个控制台应用程序对同一查询进行了100次循环测试,无论何时启动控制台应用程序,延迟都会每10秒发生一次 查询通常需要150毫秒才能完成。每10秒需要2-3秒 测试和生产数据库服务器上的行为都是相同的。我们使用了几个触发器(5),其中没有一个是由负载测试中使用的查询触发的 负载测试是一个带有简单select查询的存储过程。在我

我们正在运行几个针对SQL Azure的Azure web应用程序(.NET核心、MVC4、MVC5)。每10秒,SQL server的响应就会有相当大的延迟。我们已经使用一个控制台应用程序对同一查询进行了100次循环测试,无论何时启动控制台应用程序,延迟都会每10秒发生一次

查询通常需要150毫秒才能完成。每10秒需要2-3秒

测试和生产数据库服务器上的行为都是相同的。我们使用了几个触发器(5),其中没有一个是由负载测试中使用的查询触发的

负载测试是一个带有简单select查询的存储过程。在我们运行这些测试时,没有其他用户使用我们的测试环境

我们还使用Azure portal中的性能测试工具对此进行了负载测试,得到了相同的结果

关于从哪里开始寻找这一延误的根本原因,有什么想法吗

我们的测试代码:

    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();
    }
private static void Main(字符串[]args)
{
var ss=新秒表();
//我们走吧
使用(SqlConnection连接=新的SqlConnection(connectionString))
{
对于(变量i=0;i<100;i++)
{
ss.Restart();
connection.Open();
var sql=“EXEC usp\u loadTestSp”;
使用(SqlCommand=newsqlcommand(sql,连接))
{
使用(SqlDataReader=command.ExecuteReader())
{
WriteLine($“当前时间{i}:{DateTime.UtcNow}”);
}
}
connection.Close();
Console.WriteLine($“循环时间{i}:{ss.elapsedmillyses}”);
}
}
EndApp();
}
更新:
刚刚在Azure上创建了一个新的SQL server,其中包含一个新的空白SQL数据库。没有桌子,什么都没有。更新了测试应用程序中的连接字符串,将查询更改为
选择NULL
。同样的结果是,每10秒执行一次所需的时间要长得多…

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

您的另一个选项是查看查询存储(它将为您提供查询服务器上执行时间的摘要数据,而不是跟踪级别的数据,但为您提供每个度量的min/max/last/avg/stdev)。这将为您提供另一个数据点,以评估这是来自服务器端还是客户端/应用程序端。

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

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

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


我希望这能给你一些东西,帮助你找到你的谜团。

谢谢大家的回复,很抱歉延迟了回复

我已找到此问题的原因,它与SQL Azure或任何其他Azure服务无关

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

现在,我们来了解如何不延迟地继续使用文件流


TGM

您是否尝试过增加SQL实例DTU?
每10秒需要2-3秒。
在2-3秒开始时
i
的值是多少。最后?这是可复制的(即,它是否与迭代次数而不是时间窗口有关)?@MikeMiller是的。在测试db(50 DTU)和prod db(500 DTU Premium)上的行为是相同的。垃圾收集器在做什么?如果它不是专有的,可能值得发布usp_loadTestSp。有趣的是,看看它是否可以复制。