为了发挥出RDS的最佳性能,阿里云提供线程池(Thread Pool)功能,将线程和会话分离,在拥有大量会话的同时,只需要少量线程完成活跃会话的任务即可。
优势
MySQL默认的线程使用模式是会话独占模式,每个会话都会创建一个独占的线程。当有大量的会话存在时,会导致大量的资源竞争,大量的系统线程调度和缓存失效也会导致性能急剧下降。
阿里云RDS的线程池实现了不同类型SQL操作的优先级及并发控制机制,将连接数始终控制在最佳连接数附近,使RDS数据库在高连接大并发情况下始终保持高性能。线程池的优势如下:
前提条件
实例版本为RDS MySQL 5.6/5.7/8.0。
使用Thread Pool
Thread Pool设计了如下三个参数,您可以在控制台进行修改。详情请参见设置实例参数。
参数 | 说明 |
---|---|
loose_thread_pool_enabled | 是否开启线程池功能。取值:
默认值:ON。
|
loose_thread_pool_size | 分组的数量,默认值:4。线程池中的线程被平均分到多个组中进行管理。 |
loose_thread_pool_oversubscribe | 每个组中允许的活跃线程的数量,默认值:32。活跃线程是指正在执行SQL语句的线程,但是不包括以下两种情形:
|
查询Thread Pool状态
您可以通过如下命令查询Thread Pool状态:
show status like "thread_pool%";
示例:
mysql> show status like "thread_pool%";
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| thread_pool_active_threads | 1 |
| thread_pool_big_threads | 0 |
| thread_pool_dml_threads | 0 |
| thread_pool_idle_threads | 19 |
| thread_pool_qry_threads | 0 |
| thread_pool_total_threads | 20 |
| thread_pool_trx_threads | 0 |
| thread_pool_wait_threads | 0 |
+----------------------------+-------+
8 rows in set (0.00 sec)
参数说明如下。
参数 | 说明 |
---|---|
thread_pool_active_threads | 线程池中的活跃线程数。 |
thread_pool_big_threads | 线程池中正在执行复杂查询的线程数。复杂查询包括有子查询、聚合函数、group by、limit等的查询语句。 |
thread_pool_dml_threads | 线程池中的在执行DML的线程数。 |
thread_pool_idle_threads | 线程池中的空闲线程数。 |
thread_pool_qry_threads | 线程池中正在执行简单查询的线程数。 |
thread_pool_total_threads | 线程池中的总线程数。 |
thread_pool_trx_threads | 线程池中正在执行事务的线程数。 |
thread_pool_wait_threads | 线程池中正在等待磁盘IO、事务提交的线程数。 |
Sysbench测试
如下是开启线程池和不开启线程池的性能对比。从测试结果可以看出线程池在高并发的情况下有着明显的性能优势。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/154244.html