1

当我的应用程序启动时,我使用 SQL Server 检索日期/时间SELECT CURRENT_TIMESTAMP,并将差异与本地日期/时间进行比较 - 并记录此偏移量。每个记录日期/时间的动作都会根据这个时间差进行调整。因此,每当我保存任何日期/时间时,它将是服务器的日期/时间 - 每次我需要它时都不会实际多次查询服务器。

问题是,让我们假设这台服务器在地球的另一端,并且连接有一点延迟。我也需要考虑这种滞后。不是请求到响应的延迟,而是服务器接收请求到响应的延迟。

如何测量从 SQL Server 获取其当前日期/时间到我的应用程序接收到它之间的延迟时间?

考虑到 SQL Server 是一个如此强大的数据库引擎,我认为有一些内置的技巧可以适应这一点。

4

2 回答 2

1

没有办法确定。考虑到请求接收需要 3 秒。请求到达服务器可能需要 2 秒,而答案可能需要 1 秒。或者,请求到服务器需要 1 秒,服务器到接收需要 2 秒。

您可以假设两者大致相等,只需将总延迟除以二。您可能想要制作几个样本并对它们进行平均。

还要考虑延迟会随着时间而变化。您现在发送的请求可能有 1 秒的延迟,但从现在开始一小时后发送的请求可能需要一半或两倍的时间,具体取决于网络上的负载。

于 2013-10-13T13:39:12.183 回答
1

这实际上是数据通信理论中更普遍的问题,而不仅仅是 SQL Server 的事情。解决它的一种方法是在开始时进行 3 或 5 次握手,并找到一个 ACK​​ 的中位时间。然后将其用作 Delta 用于所有未来的通信。

在 SQL Server 案例中,您可以运行一个非常简单的查询SELECT 1,例如检查获取结果所需的时间。这里的一个陷阱是避免使用任何低级机制,例如 TCP(如果您也可以控制服务器端),因为执行查询将确保您计算的总增量包括 SQL Server 接收查询和解析的时间它等等。

于 2013-10-13T13:32:18.350 回答