【问题标题】:Latency between SQL Server 2005 and .NETSQL Server 2005 和 .NET 之间的延迟
【发布时间】:2010-11-20 04:39:40
【问题描述】:

这个问题是previous asked question的后续问题。

我写了一个看起来像这样的简单程序。

string s;
do
{
  using (SqlConnection conn = new SqlConnection("POOLEDCONN"))
  {
    using (SqlCommand cmd = new SqlCommand("", conn))
    {
        s = (string) cmd.ExecuteScalar();
        Code2IncrementPerfomanceCounter
    }
  }    
} while (!string.IsNullOrEmpty(s))

查询返回一个字符串(nvarchar(max),当前最大大小为 9k),SQL Server 和 .NET 之间有很多延迟。 SQL Profiler 说查询的持续时间为 0 毫秒,所以我认为它不是数据库。网络在不到 1 毫秒的时间内做出响应,所以它不应该是网络。

如果我在我们的测试服务器(VMWare,SQL 未虚拟化)上运行此代码,则每秒最多会有 600 个循环。该应用程序消耗的 CPU 不超过 5%。为什么不去 快点?我必须使用流式传输从 SQL 或其他方式获取数据吗?

提前感谢

【问题讨论】:

  • 你是如何确定这个延迟的?
  • 那么,抱歉,他们报告了什么?每秒 600 次是不是很慢?显然,您发布的代码没有实际的 SQL;你的 SQL 是什么?您如何测试它在 SQL 中快速运行?两种环境中的数据库是否相同?
  • SQLServer 分析器不断说我的存储过程以 0 毫秒的持续时间执行。如果我执行此应用程序两次,则 600 p/s 会增长到 1200 p/s。所以我认为 SQL-server 不应该是问题 ;-)
  • 等等,我注意到您已经编辑了您的帖子以考虑“增加性能计数器的代码”。那个代码是什么?
  • 有趣。所以我显然是在暗示这可能是你的速度问题的原因。

标签: .net sql-server latency


【解决方案1】:

每秒 600 次调用是每 1.7 毫秒一次调用。如果你的延迟是 1 毫秒,而 Sql Server 会增加一点,这似乎是一个合理的结果?

【讨论】:

  • 我明白,但如果我在 sqlserver 本地运行程序,每秒最多也有 600 次调用
  • 是什么让您认为每秒 600(或 1200)个查询如此缓慢,必须对此作出解释?
  • 它并不慢,但我看到 sql-resultset(nvarchar(max)) 和 .net(string) 之间存在延迟。我们的 SQL 服务器使用的 CPU 不多(低于 20%),我们的应用服务器消耗的 CPU 不超过 5%(如果我们单线程运行)
  • 当你说“我看到延迟”时,你是什么意思?我没有看到任何证据表明“sql-resultset(nvarchar(max)) 和 .net(string) 之间的延迟”是应用程序性能的限制因素。
  • 我认为你是对的。我在 stackoverflow 上的某处读到,如果结果在 0-15 毫秒的范围内,SQL Server Profiler 会将持续时间四舍五入到 0 毫秒。所以它可能是查询。
【解决方案2】:

我有三个不同的事情需要你看:

  1. 您的 Web 服务器是使用 TCP/IP 连接到 DB 服务器还是使用不同的协议?
  2. 运行 dtoNet 进程的机器上的网络有多忙?
  3. 如果删除 SQL 调用并仅保留性能计数器日志记录,性能是否会超过 600 个进程/秒?

【讨论】:

  • 1.) SQL Server 2005 网络配置已启用共享内存和 TCP/IP。所以我认为应用程序服务器将使用 TCP/IP ;-) 2.) 网络利用率低于一个百分比(任务管理器 1Gbs)3.) 我将查询更改为始终返回相同的记录,然后它是 1200 调用/秒
  • 您的连接字符串可以覆盖默认协议,因此您应该验证您正在使用 TCP/IP 进行远程连接。此外,由于更改查询以返回静态结果改善了事情,我想说问题是查询本身或查询返回的数据量(如果您始终超过 4K 的数据,它将被拆分为多个数据包这会减慢速度)。
【解决方案3】:

打开和关闭 SQL 连接的开销很大。你可以只做一次吗?

【讨论】:

  • 连接池化,开闭免费。
  • .NET 在连接字符串上使用连接池,所以这应该不是问题。
猜你喜欢
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多