参数配置

可以通过以下几个参数对线程池进行配置。

参数名称 默认值 参数类型 取值范围 含义 Windows 平台下生效 Linux 平台下生效
ENABLE_THREADPOOL FALSE 布尔 TRUE/FALSE 是否开启线程池 Yes Yes
THREADPOOL_MAX_THREADS 200000 数值 1~200000 线程池最大线程数 Yes Yes
THREADPOOL_MIN_THREADS 1 数值 1~256 线程池最小线程数 Yes  
THREADPOOL_SIZE 0 数值 0~256 线程池的分组数   Yes
THREADPOOL_STALL_LIMIT 500(ms) 数值 10~65535 检查线程的检查时间间隔 Yes Yes
THREADPOOL_IDLE_TIMEOUT 60(s) 数值 1~65535 工作线程的空闲超时时间   Yes
THREADPOOL_OVERSUBSCRIBE 3 数值 1~1000 单个CPU核心上的"超频"线程数   Yes
THREADPOOL_HIGH_PRIO_TICKETS 2147483647(INT_MAX) 数值 0~2147483647(INT_MAX) 优先队列投票数   Yes
THREADPOOL_HIGH_PRIO_MODE 0 数值 0~2 队列调度模式   Yes

以下是对线程池配置参数的详细介绍:

ENABLE_THREADPOOL

是否开启线程池,默认FALSE,不开启线程池。

THREADPOOL_MAX_SIZE

线程池的最大线程数,防止线程池无限增长。

THREADPOOL_MIN_SIZE

线程池的最小线程数。

THREADPOOL_SIZE

线程中的分组数,最大值128。

注解

建议用户根据不同的机器环境手动将 THREADPOOL_SIZE 修改为当前逻辑CPU个数。 这样做的目的是为了把每个分组对应到每个CPU的核心上,保证每个组都有一个活跃的线程在运行,从而达到充分利用CPU的目的。

THREADPOOL_STALL_LIMIT

检查线程的检查时间间隔,在神通数据库的线程池中有一个单独的检查线程,用于定期检查线程池中是否有”停滞”分组,以及定期清理超时的客户端连接等工作。

在检查时间间隔内,一个分组如果没有接收到新的事件、也没有开始处理新的事件,则认为该分组是一个"停滞"分组。

THREADPOOL_IDLE_TIMEOUT

在神通数据库的线程池中当一个工作线程持续空闲了一段时间后会自动退出,以保证在业务空闲时减少线程中的线程数。

该参数的单位为秒。用户可以根据自己的业务场景来调整该参数的值,如果设置的过小,会造成线程频繁的创建销毁,占用系统资源,如果设置的过大,会导致线程池中的线程数长时间不会下降,也会浪费一定的系统资源。

THREADPOOL_OVERSUBSCRIBE

该参数用于控制单个CPU核心上“超频”的线程数,如果单个核心CPU上活跃的线程数为1,我们认为它没有“超频”。

神通数据库将线程池由多个分组组成,每个线程池分组对应于一个CPU的核(默认配置),如果能够保证每个线程池分组活跃的线程控制在一定范围内,就能很好的利用系统资源。

建议不要修改此参数值。

THREADPOOL_HIGH_PRIO_TICKETS

优先队列投票数。

每个新连接都被分配了 THREADPOOL_HIGH_PRIO_TICKETS 个票数,当票数不为0时,连接才有可能进入高优先级队列,被优先执行。

THREADPOOL_HIGH_PRIO_MODE

队列调度模式,该参数通过以下三个值进行配置:

  • 0:根据连接是否有活跃事务和 THREADPOOL_HIGH_PRIO_TICKETS 的值决定是否进入高优先队列
  • 1:所有语句都进入高优先队列
  • 2:所有语句都进入普通队列

注解

1 模式下的连接可以尽快的获得处理线程执行任务, 2 模式的连接总是等线程池分组中活跃线程和等待线程数在恰当的范围内才会获得处理线程执行任务。 由于 1 模式 和 2 模式 所有连接始终使用单个队列,所以两种模式的性能都会比 0 模式 差一些。