#会话管理
客户端或驱动接口连接到YashanDB数据库服务端时,连接监听器将为每个客户端连接创建或分配相应的线程用于承载该客户端连接会话。
# 会话模式
YashanDB支持以下会话模式:
独占线程会话模式:为每个客户端连接创建一个独立的工作线程,专门为该会话服务,会话断连时对应的工作线程会被销毁。
共享线程会话模式:以线程池的方式管理会话工作线程。当有新的客户端连接被接纳后,会从线程池里分出一个空闲线程来处理该会话连接。会话完成后,该线程将回到线程池中,等待新的客户端会话连接。
# 切换会话模式
会话模式由配置参数MAX_REACTOR_CHANNELS控制,值为0表示独占线程会话模式,非0值表示共享线程会话模式。
在单机、共享集群部署中,默认采用独占线程会话模式(MAX_REACTOR_CHANNELS = 0)。
在存算一体分布式集群部署中,CN节点必须采用共享线程会话模式(MAX_REACTOR_CHANNELS > 0,默认为1)处理来自客户端连接的任务,MN、DN节点组无需配置该参数。
如需切换会话模式,执行ALTER SYSTEM SET语句设置对应参数值并重启生效即可。
采用共享线程会话模式时,会话相关配置/表现还受以下参数影响,请根据实际需求合理配置相关参数值:
MAX_REACTOR_CHANNELS:负责监听处于等待状态的网络连接的后台线程数量。
参数值的配置建议/要求:在存算一体分布式集群部署中,CN节点必须配置MAX_REACTOR_CHANNELS为非0值。
MAX_WORKERS:共享线程池中最大线程数量,即数据库中并行的最大任务数。
参数值的不同表现与配置建议/要求:
当MAX_WORKERS设置为0时,MAX_WORKERS的实际生效值取CPU数 * 2。
在单机、共享集群部署中,当MAX_WORKERS >= MAX_SESSIONS时,线程池关闭(即使MAX_REACTOR_CHANNELS > 0也不起作用)。
在存算一体分布式集群部署中,共享线程会话模式始终开启,若MAX_WORKERS >= MAX_SESSIONS,MAX_WORKERS的实际生效值取二者中较小值。
在存算一体分布式集群部署中,推荐单个MN、DN上的MAX_WORKERS配置 = 所有CN上的配置之和。
MAX_SESSIONS:最大可申请的会话资源数,需消耗会话资源数的场景包括用户建立连接会话、并行执行以及部分数据库后台线程。
参数值的配置建议/要求:在存算一体分布式集群部署中,推荐单个MN、DN上的MAX_SESSIONS配置 = 所有CN上的配置之和。
Note:
处于事务中的客户端请求会一直占用共享线程,超过共享线程数量的事务不提交会阻塞其他连接的任务处理,若发生类似情况,请使用保留连接进行应急处理。
# 会话连接信息视图
采用共享线程会话模式时,GV$SESSION_WORKER、V$SESSION_WORKER视图将记录共享线程池的汇总信息。
在存算一体分布式集群部署中,通过GV$SESSION视图的GLOBAL_SESSION_ID字段可以确定各个节点间会话之间的联系,通过GV$DATA_CONNECTION视图可以获取现有的会话内连接信息,主要是CN和各个已建立连接的节点之间的关系。

