Spring Boot Spanner 延迟问题

问题描述 投票:0回答:1

我发现我们的服务存在延迟问题,每个读取语句花费的时间超过 40 毫秒。

我尝试使用本机/派生查询,但总是需要超过 40 毫秒。

读取数据确实很快,不到1毫秒,但从日志中我可以看到建立与Spanner的grcp连接花费了大部分时间。

阅读日志

10:16:36.485 [http-nio-8080-exec-2] [,] DEBUG o.s.web.servlet.DispatcherServlet - GET "/test", parameters={}
10:16:36.485 [http-nio-8080-exec-2] [,] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to edu.Controller#test()
10:16:36.485 [http-nio-8080-exec-2] [,] DEBUG o.s.o.j.s.OpenEntityManagerInViewInterceptor - Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
10:16:36.485 [http-nio-8080-exec-2] [,] DEBUG c.g.c.s.d.s.c.SpannerTransactionManager - Creating new transaction with name [Repository.findById]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly
10:16:36.485 [http-nio-8080-exec-2] [,] DEBUG c.g.c.s.d.s.core.SpannerTemplate - Executing read on table test_table with keys: {[6fb703b4-59b4-4381-abd5-0594924c093c]} and columns: id, name
10:16:36.485 [http-nio-8080-exec-2] [,] DEBUG c.g.c.s.d.s.core.SpannerTemplate - Read elapsed milliseconds: 0
10:16:36.487 [grpc-default-worker-ELG-1-5] [,] DEBUG i.g.n.s.i.g.netty.NettyClientHandler - [id: 0xea23po983, L:/192.168.1.1:50000 - R:spanner.googleapis.com/200.200.200.200:443] OUTBOUND HEADERS: streamId=11 headers=GrpcHttp2OutboundHeaders[:authority: spanner.googleapis.com:443, :path: /google.spanner.v1.Spanner/BeginTransaction, :method: POST, :scheme: https
10:16:36.487 [grpc-default-worker-ELG-1-5] [,] DEBUG i.g.n.s.i.g.netty.NettyClientHandler - [id: 0xea23po983, L:/192.168.1.1:50000 - R:spanner.googleapis.com/200.200.200.200:443] OUTBOUND DATA: streamId=11 padding=0 endStream=true
10:16:36.525 [grpc-default-worker-ELG-1-5] [,] DEBUG i.g.n.s.i.g.netty.NettyClientHandler - [id: 0xea23po983, L:/192.168.1.1:50000 - R:spanner.googleapis.com/200.200.200.200:443] INBOUND HEADERS: streamId=11 headers=GrpcHttp2ResponseHeaders[:status: 200, content-type: application/grpc]

正如您从最后两个日志的时间戳中看到的,它需要 39 毫秒,我尝试使用只读事务,在没有事务的情况下进行读取,将 SpannerTemplate 上的 rcp 优先级设置为低,但没有任何帮助,并且简单地调用通过以下方式获取对象的其余端点当从数据库读取的时间小于 0 毫秒时,id 需要超过 40 毫秒。

有人遇到过类似的问题吗?我该如何修复/调整它?

java spring google-cloud-spanner low-latency
1个回答
0
投票

如果您还愿意分享您正在执行的代码示例,将会非常有帮助。

总体来说:

  1. 首次创建 Cloud Spanner 客户端并执行查询时,客户端将在内部创建会话池并建立与 Cloud Spanner 的连接。这是一项繁重的操作,可能需要“很长”的时间(数十毫秒)。初始化是异步发生的。如果查询尚未完成,则必须等待它完成。
  2. 您在同一 Cloud Spanner 客户端上执行的第二个也是进一步的查询将使用已创建的会话池和与 Cloud Spanner 的连接。这意味着第二次和进一步的查询应该更快。
© www.soinside.com 2019 - 2024. All rights reserved.