GaussDB(DWS)stream线程池设计(三)

举报
c.j 发表于 2021/07/31 15:20:48 2021/07/31
【摘要】 一、外部接口1.1 新增接口介绍stream线程池新增GUC参数max_stream_pool,用于控制线程池中最大可用线程的个数。默认值:65535(整数最大值)取值范围:-1~INT_MAX;-1表示不开启stream线程池max_stream_pool支持reload更新,更新规则:设置max_stream_pool小于当前可用线程个数,支持线程个数实时减少;当设置max_stream...

一、外部接口

1.1 新增接口介绍

stream线程池新增GUC参数max_stream_pool,用于控制线程池中最大可用线程的个数。

默认值:65535(整数最大值)

取值范围:-1~INT_MAX-1表示不开启stream线程池

max_stream_pool支持reload更新,更新规则:设置max_stream_pool小于当前可用线程个数,支持线程个数实时减少;当设置max_stream_pool大于当前idle线程个数,将由业务驱动线程个数的增加。

1.2  修改接口介绍

stream线程池修改pg_thread_wait_status视图中等待状态,新增wait stream cond状态表示线程池中等待被复用的stream线程,DN上可见。

图一 pg_thread_wait_status视图

pg_comm_status视图补充三个变量:复用stream线程的次数、使用stream线程的次数(含复用和create)、stream线程并发个数的历史峰值。

performance显示是否复用线程,拿连接唤醒等开销性能数据,超出1ms输出到performance。

二、  内部接口

Stream线程池提供了三种接口以管理stream线程,除外部接口外,内部的接口包含被动清理接口和超时清理接口。如图六所示:

图二、stream线程管理接口

被动清理接口CleanStreamPool负责根据database清理stream线程,其提供三种清理模式:

  • CLEAN_QUARTER_FREE:清理四分之一idle线程;
  • CLEAN_ALL_FREE:清理所有idle线程;
  • CLEAN_ALL_FORCE:清理所有dababase相关的stream线程。

该接口由内部函数调用,例如dropdbclean connection等。

自动清理接口负责自行定时清理超时未使用的idle线程,其不开放给任何调用,此处接口可以理解为线程的一种管理方式。

清理逻辑:max_stream_pool阈值不作强约束,尽量缓存线程,通过空闲连接利用率决定回收间隔,空闲率高时快速回收,反之慢速回收

三、接口实现逻辑

接口的实现逻辑:

3.1、被动清理接口

int StreamThreadPool::CleanStreamPool(const char *dbName, cleanOption cleanMode)

入参:dbName cleanMode

返回值:清理的个数

CleanMode可选:CLEAN_QUARTER_FREECLEAN_ALL_FREECLEAN_ALL_FORCE

实现流程如下:

 

图三、CleanStreamPool接口执行逻辑

3.2、超时清理接口

超时清理接口是指idle状态的slot超时未被使用而自动清理,其实现在图七的wait()模块,对应StreamThreadPool::Wait()函数,其实现流程如图十一所示:

可以看出当线程超时需要清理时,实际对应的操作为:将slot的状态从IDLE置为HOLD,表示该slot已被预占作为退出线程。随后返回false,函数退出。

根据图七所示,wait()返回false后,stream线程会退出,调用回调函数StreamQuitAndClean(),将slot归还emptyRing,其执行逻辑如图十二所示。

由图十一和十二可以看出,当slot超时退出,此时slot的状态仅仅被修改为了EXIT,而其所处的位置仍然在idleRing中,slot此时在idleRing中等待被poppop后发现状为EXIT,会将slot放回置empty状态中,pop的逻辑如图十二所示。

 

图四、wait()执行逻辑


图五、slot异常退出执行逻辑

  图六、slot获取执行逻辑

  1. 外部接口

stream线程池可通过reload参数max_stream_pool,用于控制线程池中最大可用线程的个数。具体流程如下:


图七、外部guc set逻辑

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。