本页介绍了如何排查 Spanner 组件问题,找出延迟来源。如需详细了解 Spanner 请求中的可能延迟时间点,请参阅 Spanner 请求中的延迟时间点。
在影响您服务的客户端应用中,确认客户端往返延迟时间是否增加。检查客户端指标中的以下维度。
- 客户端应用名称
- 客户端位置(例如 Compute Engine 虚拟机可用区)和主机(即虚拟机名称)
- Spanner API 方法
- Spanner API 状态
按这些维度进行分组,看看问题是否仅限于特定客户端、状态或方法。对于双区域或多区域工作负载,请检查问题是否仅限于特定客户端或 Spanner 区域。
检查客户端应用的运行状况,尤其是客户端的计算基础架构(例如虚拟机、CPU 或内存利用率、连接、文件描述符等)。
检查 Spanner 组件的延迟时间:
a. 使用 OpenTelemetry 或使用 OpenCensus 检查客户端往返延迟时间。
b. 使用 OpenTelemetry 或 使用 OpenCensus 检查 Google 前端 (GFE) 延迟时间。
c. 使用 OpenTelemetry 或 使用 OpenCensus 检查 Spanner API 请求延迟时间。
如果客户端往返延迟时间较长,但 GFE 延迟时间和 Spanner API 请求延迟时间较短,则应用代码可能存在问题。这也可能表示客户端与区域级 GFE 之间存在网络问题。如果您的应用存在导致某些代码路径变慢的性能问题,则每个 API 请求的客户端往返延迟时间可能会增加。客户端计算基础架构中可能还存在上一步未检测到的其他问题。
请查看 Spanner 指标的以下维度:
- Spanner 数据库名称
- Spanner API 方法
- Spanner API 状态
按这些维度进行分组,看看问题是否仅限于特定数据库、状态或方法。对于双区域或多区域工作负载,请检查问题是否仅限于特定区域。
如果 GFE 延迟时间较长,但 Spanner API 请求延迟时间较短,则可能由以下某种原因所致:
从其他区域访问数据库。此操作可能会导致 GFE 延迟时间较长,而 Spanner API 请求延迟时间较短。例如,如果来自
us-east1
区域的客户端的流量在us-central1
地区具有实例,则 GFE 的延迟时间可能会比较长,但 Spanner API 请求的延迟时间会比较短。GFE 层存在问题。查看 Google Cloud 状态信息中心,了解您所在的区域是否持续存在任何网络问题。如果未发现任何问题,请创建支持请求并添加此信息,以便支持工程师可以帮助您排查 GFE 的问题。
检查实例的 CPU 利用率。如果实例的 CPU 利用率高于建议的水平,您应手动添加更多节点或设置自动伸缩。如需了解详情,请参阅自动扩缩概览。
使用 Key Visualizer 观察和排查潜在的热点或不平衡的访问模式,并尝试回滚与问题时间范围密切相关的所有应用代码更改。
检查流量模式是否发生了变化。
使用最早的活跃查询中的流程查看可能导致性能瓶颈的任何支出查询,并根据需要取消这些查询。
请使用以下主题中排查问题部分中的步骤,使用 Spanner 自省工具进一步排查问题:
后续步骤
- 现在,您已经确定了存在延迟时间的组件,接下来可以使用 OpenCensus 进一步探索该问题。如需了解详情,请参阅使用 OpenTelemetry 捕获自定义客户端指标或使用 OpenCensus 捕获自定义客户端指标。
- 了解如何使用指标诊断延迟时间。
- 了解如何排查 Spanner 超出期限错误。