Percona 5.6 thread pool说明及使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

本文主要简单介绍一下thread pool,因为目前网上的文章都只是针对thread pool的原理说明,没有实际的使用示范。因此本会针对thread pool的使用做一些说明。


欢迎转载,请注明作者、出处。
作者:张正
blog:http://space.itpub.net/26355921 
QQ:176036317
如有疑问,欢迎联系。

Thread pool是什么:
MySQL是每个连接上来都要创建一个线程来执行语句。这样每一个新的连接进来即会创建一个新的线程,这种动作对MySQL本身压力比较大。Threadpool是提供一种线程代理的模型执行每个连接的语句。而MySQL内部维护一个可能接受的线程总数,减少线程太多在CPU切换等方面的压力。
使用Threadpool的好处:
1.使用线程代理的模型在连接数已知可控的情况下,提前创建好过线程并利用操作系统的threadpool技术维护,能减少很多开销
2.尽可能的使用操作系统的线程方面的管理,把线程管理开销降到最低
3. 利用thread_pool_max_threads控制资源使用
使用方法:
目前支持threadpool的有MariaDB, Percona, 官方MySQL 5.5的一个收费plugin功能。percona与mariadb配置启用:
在my.cnf 中添加参数:
[mysqld]
#thread pool
thread_handling=pool-of-threads
thread_pool_max_threads=100       #设置thread pool线程的上限值(同时running的最大线程数为100)
thread_pool_size=50               #thread pool中线程数的下限值
mysql> show variables like 'thread%';
+-------------------------------+-----------------+
| Variable_name                 |      Value      |
+-------------------------------+-----------------+
| thread_cache_size             |         28      |
| thread_concurrency            |         10      |
| thread_handling               |pool-of-threads  |
| thread_pool_high_prio_mode    | transactions    |
| thread_pool_high_prio_tickets | 4294967295      |
| thread_pool_idle_timeout      |    60           |
| thread_pool_max_threads       |    120          |
| thread_pool_oversubscribe     |      3          |
| thread_pool_size              |     50          |
| thread_pool_stall_limit       |    500          |
| thread_stack                  | 262144          |
| thread_statistics             | OFF             |
+-------------------------------+-----------------+
Thread_pool_stall_limit:以10ms为单位,默认60ms范围值4-600,每个语句的时间片大小,一旦耗完则挂起将CPU交于其他线程
空闲时:
mysql> show global status like 'thread%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Threadpool_idle_threads | 51    |
| Threadpool_threads      | 52    |
| Threads_cached          | 0     |
| Threads_connected       | 22    |
| Threads_created         | 148   |
| Threads_running         | 1     |
+-------------------------+-------+
6 rows in set (0.00 sec)
系统中22个线程数(Threads_connected)为zabbix的连接,虽然目前总连接数为22,但是thread pool中的线程数(Threadpool_threads)为52。
该值的最小值决定于参数thread_pool_size 的值。
目前running线程数为1,空闲线程数为 51.
sysbench增加连接数:
使用sysbench创建1000个线程进行读写操作,同时还有22个zabbix的连接,共1022个连接:
sysbench --num-threads=1000 --test=oltp --mysql-user=root --mysql-password=root --mysql-table-engine=innodb  --init-rng=on --oltp-table-size=19390000 --max-time=$RT --max-requests=20000 --mysql-db=test --mysql-socket=/var/lib/mysql/mysql.sock run > sysbench.log
mysql> show global status like 'thread%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Threadpool_idle_threads | 46    |     -->目前thread pool中还剩余46个空闲thread
| Threadpool_threads      | 120   |     -->thread pool中允许同时running的最大线程数
| Threads_cached          | 0     |
| Threads_connected       | 1022  |     -->目前数据库一共有1022个连接
| Threads_created         | 476   |
| Threads_running         | 87    |     -->目前正在运行的线程数为87
+-------------------------+-------+
6 rows in set (0.37 sec)
数据库中 Threadpool_idle_threads(46) + Threads_running(87) 之和(133) 大致是与 Threadpool_threads(120) 的值相等的,
而 Threadpool_threads 的最大值是受限于 参数thread_pool_max_threads的值。
系统中总共连接数有1022,而running的线程数只有87,还有46空闲,是因为操作系统的CPU已经耗尽。
本文转自ITPUB博客84223932的博客,原文链接:Percona 5.6 thread pool说明及使用,如需转载请自行联系原博主。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
算法 关系型数据库 MySQL
TiDB保证数据一致性的策略与优势
【2月更文挑战第28天】TiDB作为一款分布式数据库,通过其独特的策略和优势,确保在分布式环境下数据的一致性。本章将详细探讨TiDB保证数据一致性的核心策略,包括其采用的分布式一致性协议、数据复制机制以及容错处理等方面,并阐述这些策略所带来的优势。通过理解TiDB的数据一致性保证机制,读者将能更深入地认识其作为分布式数据库的价值。
|
人工智能 运维 安全
世界级大模型群,进化阿里云服务器操作系统新范式
世界级大模型群,进化阿里云服务器操作系统新范式
359 13
|
SQL 关系型数据库 MySQL
MySQL 8.0:filesort 性能退化的问题分析
用户将 RDS MySQL 实例从 5.6 升级到 8.0 后,发现相同 SQL 的执行时间增长了十几倍。本文就该问题逐步展开排查,并最终定位根因。
|
10月前
|
人工智能 自然语言处理 算法
为什么自己写的算法备案文档越改问题越多?
算法备案文档撰写中,许多开发者遇到越改问题越多的困境。主要原因包括:缺乏明确指导标准、对算法理解不深、部门间沟通协作不足、审核反馈机制缺失及撰写人员专业性不足。为解决这些问题,建议深入学习备案要求、加强算法研究、建立有效沟通机制、严格审核反馈,并寻求专业人士帮助。通过这些方法,可以提高文档质量,确保顺利通过审核。
|
存储 关系型数据库 MySQL
MySQL 中的 BLOB 数据类型深入解析
【8月更文挑战第31天】
2028 0
|
存储 监控 AliSQL
RDS AliSQL 面向 Binlog 的性能优化大揭密(上)—— 极致 IO 优化
RDS MySQL使用AliSQL内核,为用户提供了MySQL所有的功能,同时提供了企业级的安全、备份、恢复、监控、性能优化、只读实例、Serverless等高级特性
3712 3
RDS AliSQL 面向 Binlog 的性能优化大揭密(上)—— 极致 IO 优化
|
SQL 存储 缓存
《MySQL高级篇》八、索引优化与查询优化(二)
《MySQL高级篇》八、索引优化与查询优化
《MySQL高级篇》八、索引优化与查询优化(二)
|
Linux
Linux perf 火焰图
Linux perf 火焰图
444 0
|
缓存 关系型数据库 MySQL
【MySQL】thread_cache_size=16,是干什么的?底层原理是什么?
【MySQL】thread_cache_size=16,是干什么的?底层原理是什么?
513 0
|
前端开发 NoSQL Java
使用 Kotlin + WebFlux/RxJava 2 实现响应式以及尝试正式版本的协程
使用 Kotlin + WebFlux/RxJava 2 实现响应式以及尝试正式版本的协程
981 0
使用 Kotlin + WebFlux/RxJava 2 实现响应式以及尝试正式版本的协程