鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

优先Session的处理

在连接数很大,高负载时,对于一些事务取得了锁等资源时,可优先处理,原先的处理逻辑是此类连接发生可读事件后,会被线程组加到优先队列中,等待空闲worker线程优先处理。对上述逻辑进一步优化,已经进入优先队列的Session所占用的worker线程不还给线程池,Session继续独占该worker线程,处理其业务逻辑。类似每线程每连接的模式,独占worker线程专用于处理该优先连接之后的所有语句,直到该连接释放了优先资源转为普通连接,例如该连接事务执行结束释放锁资源。优先Session连接的判断逻辑如图1 优先session独占worker线程逻辑所示。

图1 优先Session独占worker线程逻辑

图1 优先session独占worker线程逻辑上的数字标记点对应的说明如表1所示。

表1 优先Session独占worker线程逻辑图上的数字标记对应的说明

数字标记序号

说明

新连接建立时,worker线程处理登录校验的逻辑,连接生命周期开始。

新连接登录校验完成后进入是否高优先级Session的判断。

如果是Admin端口上的管理连接,则会一直独占worker线程,避免进入等待队列得不到worker线程的处理。

如果Session经过判断后为高优先级的Session,将继续占用当前worker线程,进入⑥等待下一条SQL语句并执行。

如果Session经过判断后为普通Session,则会将当前Session的连接标识加入到当前线程组的epoll_wait中,当前worker线程将状态置为空闲并归还本线程组。

epoll_wait中触发网络可读事件(有SQL语句到达)或worker独占的Session,将在worker线程等待SQL语句的到达。

worker线程中等待接收SQL语句并执行完成后,若执行结果正常且非结束连接,将进入③进行Session优先级判断。

登录校验失败,连接生命周期结束。

等待接收SQL语句或执行SQL语句出现异常,或Session结束退出时,连接生命周期结束。