Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sql Server响应时间不一致_C#_Sql_Sql Server_Performance - Fatal编程技术网

C# Sql Server响应时间不一致

C# Sql Server响应时间不一致,c#,sql,sql-server,performance,C#,Sql,Sql Server,Performance,我有一个C应用程序,它只需向SQL Server发送一个简单的SQL脚本,并显示服务器的响应 代码如下所示: static SqlConnection conn = new SqlConnection("Data Source=servername;Initial Catalog=dbname;User ID=username;Password=password"); static void Main(string[] args) { conn.Open(); while (C

我有一个C应用程序,它只需向SQL Server发送一个简单的SQL脚本,并显示服务器的响应

代码如下所示:

static SqlConnection conn = new SqlConnection("Data Source=servername;Initial Catalog=dbname;User ID=username;Password=password");

static void Main(string[] args)
{
    conn.Open();
    while (Console.ReadLine() == "")
    {
        ShowData();
    }
    conn.Close();
}

static Stopwatch sw = Stopwatch.StartNew();

static void ShowData()
{
    var t1 = sw.ElapsedMilliseconds;
    var s = @"SELECT TOP (1) [t0].[GroupName] FROM [dbo].[Groups] AS [t0] WITH (NOLOCK) WHERE [t0].[GroupId] = '43ed86d4-42ef-4e6c-9a98-ba48c1f293e7'";

    var com = new SqlCommand(s, conn);
    var reader = com.ExecuteReader();

    if (reader.Read())
    {
        Console.WriteLine(reader[0]);
    }

    reader.Close();

    Console.WriteLine(sw.ElapsedMilliseconds - t1);
}
应用程序屏幕截图:

Wireshark截图:

我按了几次ENTER键,响应时间不一致。在最后6次按下时,最快的响应是5毫秒,最慢的响应是29毫秒。我不知道为什么,似乎所有的响应都应该缓存在服务器中


顺便说一句,我已经分析了SQL Server,这些SQL的持续时间都是0。执行计划均为聚集索引搜索。

感知响应时间将取决于多个因素:网络连接拥塞、SQL Server上的CPU使用情况、应用程序运行所在机器上的CPU使用情况、HDD I/O等。您不能期望时间完全相同,即使使用缓存。

我建议用几种不同的方法来探究这个问题,以进一步了解差异

例如,如果将查询更改为SELECT 1之类的不需要检索的查询,会发生什么情况

。。。如果你仍然看到与此不同,那么我会怀疑其他人在说什么。。。网络,来自其他进程的不可预测的负载,等等。顺便说一句,希望您有一个到数据库服务器的千兆网络连接,并且没有任何较慢的速度

。。。如果这消除了差异,那么您需要怀疑SQL Server的检索。例如,它是否在两个不同的查询计划之间摇摆不定?顺便说一句,你说它在使用聚集索引搜索。。。您是说假定非唯一的GroupId列上有聚集索引吗?

在调用数据读取器上的Close之前,请尝试调用command对象上的Cancel,解释这可能会有帮助的原因


然后再次尝试运行测试

网络问题?如果在运行SQL server的服务器上运行该程序,是否可以复制?@usr是的,可以复制。我也在服务器端运行了wireshark。您是否尝试排除常见的SQL server问题,如阻塞或负载峰值?请同时检查服务器和客户端上的BIOS设置和Windows电源管理设置。对于基准测试,最好将它们设置为最大性能,以避免CPU节流。2012年的时间安排似乎很紧,我很好奇其他人是否真的看到了小于~50ms的查询的一致时间安排。我还在服务器端运行wireshark,也有这个问题,所以我认为这不是网络问题。我还运行了SQL server profiler,它显示CPU为0,持续时间为0,读取成本非常低。我指的是整个系统的CPU使用率,而不仅仅是单个进程,例如SQL server。请记住,在您的服务器和客户机上同时运行着许多进程,它们在任何给定时刻都在消耗不同的CPU周期。要查看效果,请在电脑上打开任务管理器,然后转到“性能”选项卡。您将看到使用率图表不断波动,即使在机器空闲时也是如此。选择1。。。好建议!很少有人通过实验进行调试。大多数人只是盯着问题想办法。