
# 线程池
#### enable_thread_pool
**参数说明** ：控制是否使用线程池功能。该参数属于POSTMASTER类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/gaussdb_42_1169.html#ZH-CN_TOPIC_0000002222152125__zh-cn_topic_0000002063779510_zh-cn_topic_0289899927_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**取值范围**：布尔型
- on表示开启线程池功能。
- off表示不开启线程池功能。
**默认值**：on
 #### thread_pool_attr
**参数说明** ：用于控制线程池功能的详细属性，该参数仅在enable_thread_pool打开后生效，仅sysadmin用户可以访问。该参数属于POSTMASTER类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/gaussdb_42_1169.html#ZH-CN_TOPIC_0000002222152125__zh-cn_topic_0000002063779510_zh-cn_topic_0289899927_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**取值范围**：字符串，长度大于0
该参数分为3个部分，'thread_num, group_num, cpubind_info'，这3个部分的具体含义如下：
- 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)'（128核CPU/1024G内存，104核CPU/1024G内存，96核CPU/1024G内存）；'2048,2,(nobind)'（96核CPU/768G内存）；'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内存）；'64,2,(nobind)'（4核CPU/16G内存）
#### thread_pool_stream_attr
**参数说明：** 用于控制stream线程池功能的详细属性，stream线程只在DN生效，该参数仅在enable_thread_pool打开后生效，仅sysadmin用户可以访问。该参数属于POSTMASTER类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/gaussdb_42_1169.html#ZH-CN_TOPIC_0000002222152125__zh-cn_topic_0000002063779510_zh-cn_topic_0289899927_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**取值范围：**字符串，长度大于0
该参数分为4个部分，'stream_thread_num, stream_proc_ratio ,group_num ,cpubind_info'，这4个部分的具体含义如下：
- 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]。
#### resilience_threadpool_reject_cond
**参数说明** ：用于控制线程池过载逃生的堆积会话数占比。该参数仅在GUC参数use_workload_manager和enable_thread_pool打开时生效。该参数属于SIGHUP类型参数，请参考[表1](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/gaussdb_42_1169.html#ZH-CN_TOPIC_0000002222152125__zh-cn_topic_0000002063779510_zh-cn_topic_0289899927_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**取值范围**：字符串，长度大于0
该参数分为recover_threadpool_percent、overload_threadpool_percent 2部分，这2个部分的具体含义如下：
- recover_threadpool_percent：线程池恢复正常状态的接入会话占线程池初始设置线程数的百分比，当已经接入的会话数小于线程池初始设置数乘以该值对应的百分比后，停止过载逃生并放开新连接接入，取值为0\~INT_MAX，设置为多少表示百分之多少。
- overload_threadpool_percent：线程池过载时的接入会话占线程池初始设置线程数的百分比，当已经接入的会话数大于线程池初始设置数乘以该值对应的百分比后，表示当前线程池已经过载，触发过载逃生kill会话并禁止新连接接入，取值为0\~INT_MAX，设置为多少表示百分之多少。
**默认值**：'0,0'，表示关闭线程池逃生功能。
**示例：**
```
resilience_threadpool_reject_cond = '100,200'
```
表示已经堆积的会话数超过线程池初始设置的线程数的200%后禁止新连接接入并kill堆积的会话，kill会话过程中会话数恢复到线程池初始设置的线程数的100%以下时停止kill会话并允许新连接接入。
![](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
- 已经堆积的会话数可以通过查询pg_stat_activity视图有多少条数据获得，需要过滤少量后台线程；线程池设置的初试线程池线程数目可以通过查询thread_pool_attr参数获得。
- 该参数如果设置的百分比过小，则会频繁触发线程池过载逃生流程，会使正在执行的会话被强制退出，新连接短时间接入失败，需要根据实际线程池使用情况慎重设置。
- recover_threadpool_percent和overload_threadpool_percent的值可以同时为0，除此之外，recover_threadpool_percent的值必须要小于overload_threadpool_percent，否则会设置不生效。
 
