nebula-python连接池最大数问题

nebula 版本:3.1
部署方式:分布式
安装方式:RPM
是否为线上版本:Y
硬件信息
磁盘 SSD
CPU、内存信息

问题

导入大量数据时,会发生【nebula3.Exception.NotValidConnectionException】。出现过两次,第一次 config.max_connection_pool_size 设定的是10,后来将它调大至30,又发生同样的错误(较第一次次,改善好多了)。请问下,这个参数最大调多少合适。

获取session使用的是上下文的方式,是会自动释放的。

代码

# 连接池配置
def create_nebula_connect_pool():
    config = Config()
    config.max_connection_pool_size = 30
    connection_pool = ConnectionPool()
    connection_pool.init(NEBULA_HOSTS_FOR_POOL, config)
    return connection_pool
# 使用方式
with nebula_conn_pool.session_context(self.user, self.pwd) as nebula_client:
    resp = nebula_client.execute(
        f"USE {NEBULA_SPACE_NAME};"
        f"{insert_sql}"
    )

错误日志

    with nebula_conn_pool.session_context(self.user, self.pwd) as nebula_client:
         │                │               │    │     │    └ 'XXX'
         │                │               │    │     └ <application.graph.graphautosync.nebulatools.nebulafactory.NebulaFactory object at 0x7fbe960a5110>
         │                │               │    └ 'root'
         │                │               └ <application.graph.graphautosync.nebulatools.nebulafactory.NebulaFactory object at 0x7fbe960a5110>
         │                └ <function ConnectionPool.session_context at 0x7fbe8238eb90>
         └ <nebula3.gclient.net.ConnectionPool.ConnectionPool object at 0x7fbe8234e990>

  File "/opt/anaconda3/envs/stpython/lib/python3.7/contextlib.py", line 112, in __enter__
    return next(self.gen)
                │    └ <generator object ConnectionPool.session_context at 0x7fbc083436d0>
                └ <contextlib._GeneratorContextManager object at 0x7fbe7b765650>
  File "/opt/anaconda3/envs/stpython/lib/python3.7/site-packages/nebula3/gclient/net/ConnectionPool.py", line 130, in session_context
    session = self.get_session(*args, **kwargs)
              │    │            │       └ {}
              │    │            └ ('root', 'XXX')
              │    └ <function ConnectionPool.get_session at 0x7fbe8238ea70>
              └ <nebula3.gclient.net.ConnectionPool.ConnectionPool object at 0x7fbe8234e990>
  File "/opt/anaconda3/envs/stpython/lib/python3.7/site-packages/nebula3/gclient/net/ConnectionPool.py", line 107, in get_session
    raise NotValidConnectionException()
          └ <class 'nebula3.Exception.NotValidConnectionException'>

nebula3.Exception.NotValidConnectionException

多少并发的? 业务上是需要往不同space插数据吗?

不需要往不同space插数据。
最近一次:跑了一晚上,没有并发,只是单机单线程在写,大概1亿实体8000w边(绝大部分vid是重复的),到早上全部写完。再导小量数据(1000以内)就出现这问题了,此时,查询也有问题(match语句)。最后把python项目重启就好了.

可能是连接池中没有把不可用的连接清理掉导致的, 有个 issue 记录了 should remove the connection if ping() failed · Issue #241 · vesoft-inc/nebula-python · GitHub

另外如果是在同一个space内插入的话可以不需要每次都执行 f"USE {NEBULA_SPACE_NAME};", 最初执行一次然后直接 insert 就好了

初始化对象就选择space,看起来是不行的
image