当我的应用程序启动时,我使用SELECT CURRENT_TIMESTAMP
从SQL Server检索日期/时间,并将差异与本地日期/时间进行比较 - 并记录此偏移量。记录日期/时间的每个动作都将根据此时差进行调整。因此,每当我保存任何日期/时间时,它将是服务器的日期/时间 - 每次我需要时都不会多次查询服务器。
问题是,让我们假设这个服务器位于世界的中间位置,并且连接中存在一些延迟。我也需要考虑这个滞后。不是从请求到响应的延迟,而是服务器接收请求到响应。
如何衡量SQL Server获取当前日期/时间到应用程序收到它的时刻之间的延迟时间?
考虑到SQL Server是如此强大的数据库引擎,我会假设有一些内置技巧来适应这一点。
答案 0 :(得分:1)
这实际上是数据通信理论中的一个更普遍的问题,而不仅仅是SQL Server的事情。解决它的一种方法是在开始时进行3或5路握手并找到一个ACK的中值时间。然后将其用作所有未来通信的Delta。
在SQL Server案例中,您可以运行一个非常简单的查询,例如SELECT 1
,并检查获取结果所需的时间。这里的一个缺陷是避免使用TCP之类的任何低级机制(如果您也控制了服务器端),因为执行查询将确保您计算的总增量包括SQL Server接收查询和解析的时间它等等。
答案 1 :(得分:1)
没有办法确定。考虑到收到请求需要3秒钟。请求到达服务器需要2秒,而回复给你的答案可能需要1秒。或者,对于请求到服务器需要1秒,对于服务器到接收需要2秒。
您可以假设两者大致相等,只是将总延迟除以2。您可能想要制作几个样本并对其进行平均。
还要考虑延迟会随着时间的推移而变化。您现在发送的请求可能会有1秒的延迟,但从现在起一小时内发送的请求可能需要一半的时间或两倍的时间,具体取决于网络上的负载。