线程池是数据库系统非常重要功能,然而MySQL社区版并不包含线程池功能,不过好在MySQL的Percona发行版本提供了这个功能,除此之外,MySQL的企业版也提供线程池,从性价比上说,Percona显然更有吸引力,因为它是开源、免费的,下面将讨论Percona版线程池的相关参数。

Percona MySQL 线程池相关参数:

thread_pool_max_threads:默认值 100000,线程池中的最大线程数。

thread_pool_size:用于设置线程池中线程组的个数,默认为服务器CPU的核心数。实现分组的目的是为了把每个分组对应到每个CPU核心上,这样在同一时间点,每个分组可调用1个线程进行执行。

thread_pool_oversubscribe:默认值为3,用于控制单个CPU核心在同一时间活跃的线程数。类似于一种“超频”的概念,线程组里正在执行的线程数量,值越大,表示在同一时间,有更多的线程能够运行。如果这个值小于3,将会导致频繁的线程睡眠和唤醒。

thread_pool_stall_limit:线程池中无可用线程时,thread_pool_stall_limit决定等待多久后创建新线程,单位为毫秒。默认是500。

在合适范围内,该值越大,MySQL服务器的整体处理性能就越好,因为较少数量的线程,会降低对于系统资源的征用。但是,并不是越大越好,因为该值越大,新线程的创建将等待更长的时间,用户的查询延迟就会越明显。

thread_pool_idle_timeout:默认值60秒,空闲线程在空闲多长时间之后退出。

thread_pool_high_prio_tickets:默认值 4294967295。控制高优先级队列策略, 给每个新的连接授予的tickets大小,如果该值设置为0,表示禁止进入高优先级队列。

thread_pool_high_prio_mode:取值范围 transactions, statements, none,默认值 transactions。该参数提供了对每个连接在高优先级队列更加细粒度的控制。

线程池分组内的待处理任务会放到任务队列中,等待worker线程处理。

每个分组有两个队列,高优先级队列和普通队列,worker线程先从高优先队列取event处理,只有当高优先队列为空时才从普通队列取event处理。

通过优先级队列,可以让已经开启的事务或短事务得到优先处理,及时提交释放锁等资源。

该参数可设置三种模式:

transactions:默认的,只有一个已经开启了事务的SQL,并且thread_pool_high_prio_tickets不为0,才会进入到高优先级队列中,每个连接在thread_pool_high_prio_tickets次被放到优先队列中后,会移到普通队列中。statements:单独的SQL总是进入高优先级队列。none:禁用高优先级队列功能,所有的连接都放到普通队列中处理。Percona MySQL 线程池相关状态变量:

Threadpool_idle_threads:表示线程池中的空闲线程数。Threadpool_threads:表示线程池中的所有线程数。线程池处理策略

线程池寻找新的连接来处理,其策略是先检查高优先级队列,如果为空,再去检查普通队列。对于已经开始的事务,其后续的执行事件会放到高优先级队列执行。当tickets变为0时,连接被放入普通队列。

thread_pool_high_prio_mode 参数的引入为了解决某些场景,如对于某些连接,不管是包含多个sql的事务执行还是autocommit,它都希望它的所有sql语句能够得到快速执行,又或者某些连接,希望请求低优先级执行自己的sql,比如监控类的连接。

有一个场景在高并发条件下会限制线程池的性能甚至导致死锁。在高并发条件下,线程池中活跃的线程达到thread_pool_oversubscribe限制,但是这些活跃的线程中全部或者大多数是在等待锁,而锁的持有者并不在线程池中。线程池中的活跃线程和等待锁的线程会积累的越来越多,最终达到 thread_pool_max_threads 限制,降低了性能。另外,如果这时持有锁的连接,被调度到连接池中,发现无法创建更多的线程,这时会导致死锁,持有锁的连接会释放锁并回滚事务。这种场景的解决方案是在活跃线程达到thread_pool_oversubscribe限制时,不要开始新的事务或者创建新的线程,直到已经开始的事务被处理。

MySQL

mysql 线程池大小设置_MySQL线程池参数解析相关推荐

  1. 线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事

    线程池应该设置多少线程合适,怎么样估算出来.最近接触到一些相关资料,现作如下总结. 最开始接触线程池的时候,没有想到就仅仅是设置一个线程池的大小居然还有这么多的学问,汗颜啊. 首先,需要考虑到线程池所 ...

  2. 线程池大小设置和CPU核心数的关系

    文章目录 1.线程池和CPU核心数的关系 2.常见概念:CPU的核心数,CPU的线程数 3.是否使用线程池就一定比使用单线程高效呢? 1.线程池和CPU核心数的关系 一般说来,大家认为线程池的大小经验 ...

  3. python3 ThreadPoolExecutor 线程池大小设置

    线程池的理想大小取决于被提交任务的类型以及所部署系统的特性.线程池应该避免设置的过大或过小,如果线程池过大,大量的线程将在相对很少的CPU和内存资源上发生竞争,这不仅会导致更高的内存使用量,而且还可能 ...

  4. ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别

    前记: jdk官方文档(javadoc)是学习的最好,最权威的参考. 文章分上中下.上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolS ...

  5. java线程池大小_线程池大小设置多少合适?java如何合理设置线程池大小?

    在连接数据库时我们经常会用到线程池,而有时候我们就会烦恼,线程池的大小究竟该设置成多大才合适呢?小伙伴们知道要如何合理设置线程池大小吗?下面跟小编一起来看看吧. 一般来说,我们线程池究竟设置多大是基于 ...

  6. mysql最大并行用户设置_mysql 优化配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  7. mysql字符集在哪设置_MySQL字符集设置

    最近,在项目组使用的mysql数据库中,插入数据出现乱码,关于这个问题做了下总结,我们从最基本的地方说起,到错误产生的深层次原因和解决办法. 基本概念 • 字符(Character)是指人类语言中最小 ...

  8. java io密集型任务_IO密集型的线程池大小设置

    类型判断(CPU密集orIO密集or混合型) 看应用是CPU密集型的还是IO密集型的,还是混合型的. CPU密集 CPU密集型的话,一般配置CPU处理器个数+/-1个线程,所谓CPU密集型就是指系统大 ...

  9. java线程池合理设置最大线程数和核心线程数

    工作中有这样一个场景,需要处理千万级别的数据的一个算法,大部分是增删查的操作.这个时候就需要使用多线程去处理. 一开始是这么配置的: @Configuration @EnableAsync(proxy ...

最新文章

  1. turtle文库 ——python
  2. Node.js 添加 C/C++ Addon
  3. Linux 服务器安装discuz 7.2论坛
  4. python优先队列_python 多线程优先队列Queue详解
  5. HarmonyOS之AI能力·分词
  6. Three.js入门
  7. android view存储为jpg,Android长按imageview把图片保存到本地的实例代码
  8. 跨平台通信中间件thrift学习【Java版本】(转)
  9. Django运行服务报NameError: name ‘os‘ is not defined-已解决
  10. 华为mate40鸿蒙系统用久了会卡吗,华为mate40用多久会卡_华为mate40能流畅使用多久...
  11. codeforces-1009D Relatively Prime Graph
  12. 高德地图完整功能的html,关于高德地图WEB版基础控件的展示
  13. 沈阳移动打造“爱贝通”、“校讯通”业务助少年儿童健康成长
  14. mysql5.7架设征途服务器_征途手工架设服务端+配套双客户端+架设流程
  15. UVM—virtual sequencer and virtual sequence详解
  16. 嵌入式设计实验三:Tasket与工作队列
  17. 传输门为什么是P/N双MOS结构
  18. 中标麒麟系统u盘安装_U盘安装中标麒麟Linux桌面版的方法
  19. Python实例10: 绘制“霍兰德人格分析雷达图”
  20. PINQ-查询数据集-简介

热门文章

  1. spring配置文件ApplicationContext.xml里面class等没有提示功能
  2. 排名最前的6款开源ERP软件比较
  3. java二级考点_计算机二级JAVA考试考点知识
  4. Re26:读论文 Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks
  5. 【java图片验证码】Java 服务端生成图片验证码及验证
  6. 半入耳式蓝牙耳机哪个好用?高端半入耳式蓝牙耳机推荐
  7. 安搭Share正确看待儿童绘画
  8. selenium安装出错解决办法
  9. 6个一描述初中这个叛逆年龄段的青少年
  10. blneder 蜡笔