:
nebula 版本:2.5.1
部署方式:分布式
安装方式: RPM
是否为线上版本:Y
硬件信息
问题的具体描述
相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)
getSession耗时过多,导致查询很慢, 甚至有些需要20ms 占据整个查询时间的90%以上,查询时延基本都在1~2ms内,速度较快。如下是查询过程中的log:
{Gql} {查询时延 resp.getLatency()} {getSession耗时} {all cost 全部查询时间}
use beekeeping_risk_control; GO FROM "12001122610252655822" OVER account_htl_uid |limit 10;resp.getLatency(): 542 ; get session cost 19; all cost :19
use beekeeping_risk_control; GO FROM "932f2627228bf0fa95ac56cbbb0dad02ca984a7142662345fd418f1813339f5b" OVER mhdnamcdt_htl_mobile |limit 5;resp.getLatency(): 2529 ; get session cost 17; all cost :21
use beekeeping_risk_control; GO FROM "1839TWP8455" OVER uid_htl_mobile reversely|limit 8;resp.getLatency(): 1445 ; get session cost 28;all cost :31
请问怎么能把连接池获取session这一时间降下来? 目前连接20ms,查询2ms,总体查询太慢,对实时查询影响很大。感谢
steam
2022 年1 月 10 日 04:53
2
huanglinhui:
getSession耗时过多
什么客户端 ,具体的版本号多少。然后贴一下硬件配置。
建立连接的动作是比较耗时的,你可以在初始化连接池时就设定minSize, 这样在查询getSession时就会从连接池中直接拿connect然后进行认证。
此外,getSession时会进行一次用户名密码的认证,如果你不是多并发查询,可以就用你拿到的session进行后续查询,不然release 后再次getSession 还是会重新进行认证的。
1 个赞
客户端版本:2.5.1client java
三台机器分布在2个机房
:每台 64 core/ 320GB内存 / 11760GB SSD
尝试后发现,只要getSession就会耗时很多。我这边是一条数据过来多线程查询几种边,我尝试维护一个连接好的池,直接取出来进行执行sql的话,看看是否可以避免由于getSession造成的耗时。
getSession 时会进行用户名密码的认证,这个动作在服务端是加锁的,你多线程情况下是会比较慢的。
也可以在业务层维护一个session池, 使用的时候就不要进行session的release了。
1 个赞
呜呜,解决了 并发查询一跳40ms->4ms暴风感动 ,感谢作者 感谢nebula 不过这样一直持续使用一个会不会有什么隐患 比如server端重启是否会有影响
你好,我也遇到了类似的问题,请问您后来具体是怎么解决的呢?
在NebulaPool 基础上维护一份已经连接好的Session list反复用
nicole
2022 年1 月 10 日 07:57
10
重启服务端的话, 你要确保自己代码里面 getSession时 要给isConnected 参数传一个true。 这样客户端内部会给你做自动的socket重连的。
2 个赞
George
2022 年1 月 13 日 02:55
14
你跨机房的网络延迟至少是5-10ms左右了,对于一个分布式系统而言,对性能的影响太大了。
在2个机房部署两套系统,做sync会比较好。
George
2022 年1 月 13 日 02:58
15
不是很了解你们机房的情况,在机房内万兆很普遍,但是机房出口也是万兆吗? 即使是万兆,延迟也没法跟同机房内比。
你的性能波动我认为有可能跟跨机房部署有关,如果在本机房内的query还好,有些partition在另一个机房的话性能就会变差
1 个赞
三台机器三副本的情况下每个机器都有完全partition数据吧 不会存在跨机房请求
不过后续加机器的话的确需要考虑这个问题 目前是一个机房2台 一个机房一台 ;之后要加的话应该是变成3+3 两套nebula做同步提供服务 感谢作者
问了下 ,目前我们的这两个机房都在一起 ,没有地理隔离 ,具体数值不清楚。不过目前其他服务也都是跨机房部署满足容灾,两套sync这种,延迟应该没啥大影响。 现在的系统主要得益于正好每台机器都有全部的数据。所以也没啥影响顶多是机器间数据同步的时候跨机房延迟高一点。
system
关闭
2022 年1 月 20 日 12:54
20
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。