【发布时间】:2017-09-01 12:14:37
【问题描述】:
我遇到了一些查询,这些查询有时比从服务器返回结果的时间要长 500 毫秒。 准确地说: 正常响应时间为 5-6 毫秒,与对服务器的 ping 时间相同。 SQL 探查器的正常查询持续时间约为 1 毫秒。 有时响应时间会上升到 500 毫秒左右。从不 300 或 400 毫秒,总是非常接近 500 毫秒。 SQL profiler 报告的实际查询持续时间仍然只有 1 毫秒左右。 我用 Wireshark 分析了网络流量,发现当我有 500 毫秒的响应时间时,我几乎立即收到了请求包的 ACK(在 5-6 毫秒的 ping 时间内)。这一定意味着服务器接收请求很快,不是网络相关的问题吧?
因此,由于某种原因,SQL 服务器接收到请求,但在执行查询之前等待或执行 SQL 探查器的“持续时间”中未包含的其他操作。 总是在 500 毫秒左右,这似乎很奇怪——这会给任何人带来任何关联吗? PS: 我也觉得SQL服务器这么快发送ACK可能有点奇怪?通常我希望它等待更长的时间,事实上,当响应时间很短时,就不会发送任何 ACK(只是在响应包上搭载)。
编辑:我正在循环测试这个。大多数响应很快,一小部分有这种延迟。延迟通常是分组的。 这是一个生产服务器,我认为它可能与同时发生的其他请求有关,但这让我感到困惑,为什么它总是延迟 500 毫秒,以及为什么它没有包含在分析器的 Duration 列中。
【问题讨论】:
-
你如何衡量这些
response times? -
我在客户端使用 System.Diagnostics.Stopwatch (C#) 进行测量。
-
您是在客户端应用程序中发出许多请求还是只发出一个用于测试?
-
啊,是的,我编辑了问题以澄清。
-
这可能是很多事情。可能是表被锁定,sql 实例负载过重,网络拥塞......这个列表可能会一直持续下去。
标签: sql-server sql-server-2014 sql-server-profiler