![如何计算一天中两个服务器之间建立连接所花费的时间?](https://linux22.com/image/725915/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E4%B8%80%E5%A4%A9%E4%B8%AD%E4%B8%A4%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%E6%89%80%E8%8A%B1%E8%B4%B9%E7%9A%84%E6%97%B6%E9%97%B4%EF%BC%9F.png)
我有两台服务器,一台是 SQL Server,另一台是安装了 IIS 的 Web 服务器。
我需要找到一个奇怪的、不可否认的信息:网络服务器一天总共花费多少时间与 SQL Server 建立连接?
为了让事情更加具体一些...
问题是,我们当前的 Web 应用程序设计得非常糟糕,即使是最简单的任务也会执行数千个查询:用户单击一个按钮,然后,3 分钟后,7 万次调用后,结果就出来了。这显然很糟糕,我希望公司能解决这个问题,但我也想得到一些数字。
我在这里想要提取的是每天在连接过程中(连接和断开连接)总共花费的时间,其中不包括等待答案本身的时间。
假设沟通方式如下:
- 网络服务器打开连接
- Web 服务器将请求发送到 DB 服务器
- DB 服务器正在执行其工作,而 Web 服务器正在等待结果
- 数据库服务器返回结果
- 连接被关闭。
我想要的是一整天内两台服务器之间每次通信的总和(包括延迟)1+2+5。可能吗?不可能吗?
答案1
建立连接后,您不会注意到其他与网络相关的性能。最明显的是往返延迟的影响,还有 TCP 慢启动。
您应该能够通过使用连接池来避免大多数的缓慢启动和连接开销(我可能是错的......实现细节和所有内容),但最大的问题是您的性能会随着您与服务器的距离越来越远而变得非常差。
70k 个请求是一个很大的数字。在网络上 ping 一台离您很近的机器。现在 ping 一台位于网络不同部分的机器。假设这就像小型 SoHO 网络和大型网络之间的区别,其中客户端应用程序位于用户的桌面上,而数据库位于数据中心的数据库服务器中。
现在,对于这些请求中的一个,平均实际需要多少次 TCP 往返。现在工作了多少次往返,以及等待往返所花费的总时间。
这就是客户端应用程序和数据库不是一个好主意的一个很好的理由;您需要一个靠近数据库的应用程序服务器组件,因此业务逻辑和数据库总是靠近在一起的。