首页/网络/网络排障速查/dig 查询耗时与统计(Query time)
DNS 与解析排查46 条

dig 查询耗时与统计(Query time)

『解析慢』要用数字说话:dig 输出 Query time(毫秒)能快速量化单次解析耗时,多服务器多域名批量采样即可画出解析延迟分布。

网络排障速查网络更新于 2026-10-13

用数字描述解析快慢

「解析慢」这种描述无法定位问题,要用数字说话。dig 的输出里有一行 Query time,单位毫秒,表示从发出查询到收到应答的耗时。单次值只能算参考,真正有用的是采样分布:同一域名连续查询多次、或对多个 DNS 服务器分别采样,比较中位数与长尾。冷缓存与热缓存的差距很大,评估时必须把首次查询与后续命中缓存的查询分开看。

基本信息

适用平台dig(BIND 9 工具集)
关键输出Query time: N msec(配合 +stats 或默认输出即可看到)
取样要点区分首次查询与缓存命中,避免混在一起统计
对比维度不同 DNS 服务器、不同域名、不同时段
相关干扰UDP 丢包会触发超时重试,单次偏大的值可能是重试后的结果

典型使用场景

  • 用户报「打开网站慢」:先量化是解析阶段慢还是连接阶段慢
  • 评估多个 DNS 服务器:用同一域名分别采样,比较中位数与长尾
  • 变更后回归:确认新 DNS 配置没有引入额外延迟
  • 排查偶发卡顿:看是否存在少数耗时极高的样本
  • 跨地域对比:从不同网络位置采样,确认解析服务是否就近

采样解析耗时

采样解析耗时
dig example.com | grep 'Query time'                 # 单次耗时
dig +stats example.com | grep -E 'Query time|SERVER'
# 连续采样并看最慢的几个
for i in $(seq 1 100); do dig +noall +stats example.com | awk '/Query time/{print $4}'; done | sort -n | tail -5
# 对比不同服务器的解析耗时
for s in 223.5.5.5 8.8.8.8 1.1.1.1; do echo -n "$s "; dig @$s +noall +stats example.com | awk '/Query time/{print $4"ms"}'; done
# 加大超时便于观察重试后的结果
dig +time=3 +tries=2 +stats example.com | grep 'Query time'

采样结果判读

现象含义下一步
首次慢、后续快第一次查询未命中缓存属于正常递归开销,评估时应分开统计
每次都慢且稳定到 DNS 的链路 RTT 高或服务器负载高换就近服务器对比验证
多数快、少数极慢存在重试或间歇性丢包结合丢包统计与超时参数一起看
所有服务器都慢本地网络或上游整体问题检查本机到目标网络的链路质量
耗时接近超时值该服务器实际未响应,靠重试才成功用 +tries=1 复测确认真实响应情况
本机解析慢常见两种原因:到 DNS 服务器的网络 RTT 偏高,或服务器本身递归查询慢(首次未命中缓存)。用 IP 直连与域名解析的耗时对比可以快速区分。

易错点

  • 只测一个域名一次就评估 DNS 性能:第二次查询命中缓存会快很多,不区分冷热缓存得出的是无意义结论
  • 忽略重试影响:UDP 丢包触发的超时重试会掩盖真实响应时间,单次偏大值可能来自重试后的成功
  • 只看平均值:解析延迟常见长尾,中位数与最慢样本更能反映用户真实体感
  • 不区分阶段:把 DNS 解析耗时与 TCP 连接耗时混为一谈,结论无法指导优化

数据来源与参考

  • BIND 9 dig 手册(+stats)
  • 解析性能测量实践

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌