SQL Server 2005 和 .NET 之间的延迟

发布于 2024-08-02 05:53:21 字数 742 浏览 6 评论 0原文

这个问题是上一个问题的后续问题提出问题

我写了一个简单的程序,如下所示。

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 个循环。该应用程序不会消耗超过 5% 的 cpu。为什么不进展 快点?我必须使用流式传输从 SQL 或其他方式获取数据吗?

提前感谢

This question is an follow-up of an previous asked question.

I've written an simple program who looks like this.

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

The query returns an string(nvarchar(max), current maximum size 9k), there is a lot of latency between SQL Server and .NET. The SQL Profiler says that the query has an duration of 0 ms, so I think it isn't the database. The network is responding in less than 1 ms so it shouldn't be the network.

If I run this code on our testserver(VMWare, SQL isn't virtualized) there will be a max of 600 loops per second. The application doesn't consume more than 5 % cpu. Why isn't it going
faster? Must I use streaming to get the data from SQL or something else?

Thanx in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幸福不弃 2024-08-09 05:53:21

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

600 calls per second is one call per 1.7 ms. If your latency is 1 ms, and Sql Server adds a little to that, that seems like a plausible result?

您需要查看三件不同的事情:

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

I have three different things you need to look at:

  1. Is your web server connecting to the DB Server with the TCP/IP or are you using a different protocol?
  2. How busy is the network on the machine running the dtoNet process?
  3. Does the performance go above 600 processes/second if you remove the SQL call and leave only the performance counter logging?
皓月长歌 2024-08-09 05:53:21

打开和关闭 SQL 连接的成本很高。你能只做一次吗?

Opening and closing the SQL connection is expensive. Can you just do that once instead?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文