连接线程池
功能介绍
当数据库并发连接过多时,存在大量资源竞争,MySQL服务器的性能会发生明显的下降。华为云RDS for MySQL提供了连接线程池,能够以少量活跃线程来服务大量数据库连接,将连接和执行解耦,在高并发场景下提高数据库性能。
功能特点
华为云RDS for MySQL连接线程池具有以下特点:
- 避免性能瓶颈,可以处理大量数据库连接,减少资源的争抢和上下文切换。
- 限制并发事务的数量,当数据库负载较高时,优先保障正在执行的事务。
- 避免由于连接得不到及时处理而出现线程异常问题。
- 当事务在等待IO和锁时,释放CPU资源以服务其他连接。
线程池相关操作
- 查询线程池参数 
     
     show variables like 'threadpool%'; +-----------------------------------+------------+ | Variable_name | Value | +-----------------------------------+------------+ | threadpool_enabled | ON | | threadpool_high_prio_tickets | 4294967295 | | threadpool_idle_timeout | 60 | | threadpool_long_conn_time | 2 | | threadpool_max_threads | 100000 | | threadpool_oversubscribe | 3 | | threadpool_prio_kickup_timer | 1000 | | threadpool_rec_launch_time | ON | | threadpool_size | 128 | | threadpool_slow_conn_log | ON | | threadpool_slow_conn_log_interval | 30 | | threadpool_slow_launch_time | 2 | | threadpool_stall_limit | 500 | +-----------------------------------+------------+ 表1 线程池参数说明 参数名 参数描述 threadpool_enabled 开启或关闭线程池。 threadpool_high_prio_tickets 高优先级线程持有的tickets数量。 threadpool_idle_timeout 线程销毁前等待的空闲时间(单位:秒)。 threadpool_long_conn_time 登录时间超过此值,则在日志中打印此次登录信息。 threadpool_max_threads 线程池共能创建的线程上限。 threadpool_oversubscribe 每个线程组中最多能创建的额外线程数。 threadpool_prio_kickup_timer 低优先级队列中最长停留时间(单位:毫秒)。 threadpool_rec_launch_time 记录线程启动时间。 threadpool_size 线程组数量。 threadpool_slow_conn_log 是否记录慢登录到error log。 threadpool_slow_conn_log_interval 记录频率,记录一次慢登录后,在此时间间隔内不再记录。 threadpool_slow_launch_time 如登录、查询时间大于此值,则status中 threadpool_slow_launch_request增加1。 threadpool_stall_limit 线程组忙碌检查间隔。 表2 线程池可修改参数说明 参数名 是否是动态参数 数据类型 取值范围 说明 threadpool_enabled 是 boolean [ON,OFF] - ON:开启线程池。
- OFF:关闭线程池。
 threadpool_oversubscribe 是 integer [1,50] 每个线程组中最多能创建的额外线程数。 threadpool_size 是 integer [1,512] 线程组数量。 
- 查询线程池状态 
     
     show status like 'threadpool%'; +------------------------------------+------------+ | Variable_name | Value | +------------------------------------+------------+ | Threadpool_active_connections | 65 | | Threadpool_active_threads | 5 | | Threadpool_avg_launch_time | 0 | | Threadpool_dump_threads | 0 | | Threadpool_idle_threads | 63 | | Threadpool_running | ON | | Threadpool_slow_launch_request | 0 | | Threadpool_threads | 237 | | Threadpool_threads_high_water_mark | 1075 | | Threadpool_waiting_threads | 57 | | Threadpool_worst_launch_time | 692548 | +------------------------------------+------------+ 表3 线程池状态说明 状态 说明 Threadpool_active_connections 线程池中活跃连接数。 Threadpool_active_threads 线程池中活跃线程数。 Threadpool_avg_launch_time 平均等待时间(单位:毫秒)。 Threadpool_dump_threads dump线程数量。 Threadpool_idle_thread 线程池空闲线程数。 Threadpool_running 线程池是否在运行。 Threadpool_slow_launch_request 超过slow_launch_request的次数。 Threadpool_threads 线程池总连接数。 Threadpool_threads_high_water_mark 历史高位线程数量。 Threadpool_waiting_threads waiting线程池状态。 Threadpool_worst_launch_time 最坏启动时间(单位:毫秒)。 
性能测试
| 模型 | 线程 | 线程池开关是否开启 | QPS(每秒查询数) | latency(时延,单位是毫秒) | 
|---|---|---|---|---|
| oltp_update_non_index | 32 | 是 | 5932.47 | 7.84 | 
| oltp_update_non_index | 64 | 是 | 10074.11 | 9.39 | 
| oltp_update_non_index | 128 | 是 | 18079.61 | 10.65 | 
| oltp_update_non_index | 256 | 是 | 27439.38 | 14.46 | 
| oltp_update_non_index | 512 | 是 | 33007.96 | 28.16 | 
| oltp_update_non_index | 1024 | 是 | 30282.13 | 51.94 | 
| oltp_update_non_index | 2048 | 是 | 29836.86 | 95.81 | 
 
    