我正在本地使用位于弗吉尼亚州北部的亚马逊微型数据库测试我的 Web 应用程序。我住在荷兰格罗宁根。当我通过公共互联网发送选择查询时,它需要2616(ms)
返回 42 千字节的结果集。
[INFO ] 2022-01-17 10:22:02.147 [http-nio-8080-exec-1] http_access_log - method=GET uri="/api/journal/get/virtual-scroll" status-code=206 bytes=42350 duration=2616(ms) client: remote ip=0:0:0:0:0:0:0:1 useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
当我执行一个简单的SELECT 1 FROM TABLE
查询时,需要 550 毫秒才能得到响应。那么这是否意味着响应大小增加时响应的延迟也会增加?还是返回结果集的查询运行缓慢?这是一个存储过程调用。
答案1
当我通过公共互联网发送选择查询时,需要 2616 毫秒才能返回 42 千字节的结果集。
请记住,请求需要到达服务器,在那里进行处理,然后回复需要返回到客户端。每次传输都包括序列化和传播到目的地,因此时间取决于数据大小。
但是,就您而言,最大的影响很可能来自服务器上的处理。复杂查询可能需要相当长的时间,具体取决于其复杂性(不一定与输出大小有关)和服务器性能。
为了完整性:
- 序列化延迟 = 数据大小 / 带宽 (42 KB / 100 Mbit/s ≈ 3.5 ms)
- 传播延迟:每 1000 公里至少 5 毫秒,取决于连接性和媒介(格罗宁根 - 弗吉尼亚每次行程 >30 毫秒)
因此,您可以粗略估计往返时间少于 100 毫秒,而其余延迟则归因于服务器处理。这就是为什么优化服务器和数据库以适应您的工作负载至关重要。此外,您需要考虑传输延迟,因此应用程序应尽可能优化和捆绑查询。