更新时间:2024-11-12 GMT+08:00
分享

线程池

enable_thread_pool

参数说明控制是否使用线程池功能。多租数据库特性(enable_mtd)需要开启该参数。

参数类型:布尔型

参数单位:

取值范围

  • on:表示开启线程池功能。
  • off:表示不开启线程池功能。

默认值off

设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议在低并发长连接性能敏感场景下,建议关闭该参数,其他场景下建议打开该参数。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

thread_pool_attr

参数说明用于控制线程池功能的详细属性,该参数仅在enable_thread_pool打开后生效,仅sysadmin用户可以访问。

参数类型:字符串

参数单位:

取值范围

该参数分为三个部分,'thread_num, group_num, cpubind_info',这三个部分的具体含义如下:

  • thread_num:线程池中的初始线程总数,可以动态扩充,取值范围是0~4096。其中0的含义是数据库根据系统CPU core的数量来自动配置线程池的线程数,如果参数值大于0,线程池中的线程数等于thread_num。线程池大小建议根据硬件配置进行设置,计算公式如下:thread_num = CPU核数*(3~5),thread_num最大值为4096。
  • group_num:线程池中的线程分组个数,取值范围是0~64。其中0的含义是数据库根据系统NUMA组的个数来自动配置线程池的线程分组个数,如果参数值大于0,线程池中的线程组个数等于group_num。
  • cpubind_info:线程池是否绑核的配置参数。可选择的配置方式有:1. '(nobind)' ,线程不做绑核;2. '(allbind)',利用当前系统所有能查询到的CPU core做线程绑核;3. '(nodebind: 1, 2)',利用NUMA组1、2中的CPU core进行绑核;4. '(cpubind: 0-30)',利用0-30号CPU core进行绑核;5. '(numabind: 0-30)',在NUMA组内利用0-30号CPU core进行绑核。该参数不区分大小写。当开启资源多租模式时,该参数不生效。

默认值'4096,2,(nobind)'(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存);'2048,2,(nobind)'(96核CPU/768G内存,80核CPU/640G内存);'1024,2,(nobind)'(64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存);'512,2,(nobind)'(16核CPU/128G内存);'256,2,(nobind)'(8核CPU/64G内存);'128,2,(nobind)'(4核CPU/32G内存);'32,1,(nobind)'(4核CPU/16G内存)

设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议内存充足且CPU性能好的情况,当业务需要更多连接时可以增加该参数值。

设置不当的风险与影响:默认值即推荐值,不建议修改。修改必须详细确认参数的规格限制,并考虑硬件资源是否足够,否则可能导致数据库异常。

thread_pool_stream_attr

参数说明:用于控制stream线程池功能的详细属性,stream线程只在DN生效,该参数仅在enable_thread_pool打开后生效,仅sysadmin用户可以访问。

参数类型:字符串

参数单位:

取值范围:

该参数分为四个部分,'stream_thread_num, stream_proc_ratio,group_num,cpubind_info',这四个部分的具体含义如下:

  • stream_thread_num:stream线程池中的线程总数,取值范围是0~4096。其中0的含义是数据库根据系统CPU core的数量来自动配置线程池的线程数,如果参数值大于0,线程池中的线程数等于stream_thread_num。线程池大小推荐根据硬件配置设置,计算公式如下:stream_thread_num = CPU核数*(3~5),stream_thread_num最大值为4096。
  • stream_proc_ratio:预留给stream线程的proc数量比例,浮点类型,默认为0.2,预留proc计算方式为:stream_proc_ratio * stream_thread_num。
  • group_num:线程池中的线程分组个数,取值范围是0~64。其中0的含义是数据库根据系统NUMA组的个数来自动配置线程池的线程分组个数,如果参数值大于0,线程池中的线程组个数等于group_num。thread_pool_stream_attr的group_num需与thread_pool_attr的group_num配置和使用保持一致,若设置为不同值,以thread_pool_attr的group_num为准。
  • cpubind_info:线程池是否绑核的配置参数。可选择的配置方式有:1. '(nobind)' ,线程不做绑核;2. '(allbind)',利用当前系统所有能查询到的CPU core做线程绑核;3. '(nodebind: 1, 2)',利用NUMA组1、2中的CPU core进行绑核;4. '(cpubind: 0-30)',利用0-30号CPU core进行绑核;5. '(numabind: 0-30)',在NUMA组内利用0-30号CPU core进行绑核。该参数不区分大小写。thread_pool_stream_attr的cpubind_info需与thread_pool_attr的cpubind_info配置和使用保持一致,若设置为不同值,以thread_pool_attr的cpubind_info为准。

默认值:

  • stream_thread_num:16
  • stream_proc_ratio:0.2
  • group_num、cpubind_info:详情请参见thread_pool_attr

设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议内存充足且CPU性能好的情况,当业务需要更多并发性能时可以增加该参数值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

resilience_threadpool_reject_cond

参数说明用于控制线程池过载逃生的线程池使用率比例。该参数仅在GUC参数enable_thread_pooluse_workload_manager打开时生效。

参数类型:字符串

参数单位:

取值范围

该参数分为两部分,'recover_threadpool_percent、overload_threadpool_percent',这两个部分的具体含义如下:

  • recover_threadpool_percent:线程池恢复正常状态时的线程池使用率,当线程池使用率小于该值时,停止过载逃生并放开新连接接入,取值为0~INT_MAX,设置为多少表示百分之多少。
  • overload_threadpool_percent:线程池过载时的线程池使用率,当线程池使用率大于该值时,表示当前线程池已经过载,触发过载逃生kill会话并禁止新连接接入,取值为0~INT_MAX,设置为多少表示百分之多少。

示例:

resilience_threadpool_reject_cond = '50,90'

表示线程池使用率超过90%后,禁止新连接接入并kill堆积的会话,kill会话过程中线程池使用率下降到50%时,停止kill会话并允许新连接接入。

默认值'0,0',表示关闭线程池逃生功能。

设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

设置建议推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 线程池使用率可以通过DBE_PERF.local_threadpool_status视图查询获得;线程池设置的初始线程池线程数目可以通过查询thread_pool_attr参数获得。
  • 该参数如果设置的百分比过小,则会频繁触发线程池过载逃生流程,会使正在执行的会话被强制退出,新连接短时间接入失败,需要根据实际线程池使用情况慎重设置。
  • recover_threadpool_percent和overload_threadpool_percent的值可以同时为0,除此之外,recover_threadpool_percent的值必须要小于overload_threadpool_percent,否则不会生效。

相关文档