MySQL线程池的学习笔记

1、线程池概述

MySQL的线程池包含在企业版里,以服务端插件的形式实现。默认情况下,MySQL处理执行的语句时,使用的模式是一个客户端连接对应一个线程(one thread per client connection)。随着连接到数据库的客户端数量的增多,MySQL在执行语句时,其性能将会有所降低。MySQL的线程池提供了另一个处理模式,让其可以减少一些不必要的开销,提升服务器的性能。

2、线程池组件

MySQL线程池提供的组件包括以下几个:

1、在MySQL系统数据库(information_schema)提供对线程池操作信息的监控系统表:

1)TP_THREAD_STATE

2)TP_THREAD_GROUP_STATE

3)TP_THREAD_GROUP_STATS

2、控制线程池工作的常用系统变量:

1)thread_pool_algorithm:控制线程并发调度的方法

2)thread_poll_high_priority_connection:在一个用户会话(session)中控制如何调用语句去执行

3)thread_pool_prio_kickup_timer:控制一个等待执行的语句从低优先级队列移动到高优先级队列的时间长短

4)thread_pool_max_unused_threads:控制最多允许多少个线程睡眠

5)thread_pool_size:在一个线程池中,控制有多少个线程组

6)thread_pool_stall_limit:控制一条正在执行的语句多久被认为是暂缓执行的

3、Performance_Schema里包含的一个工具能用来显示关于线程池信息和性能调查信息,可以使用下面的查询去确认 

SELECT * FROM PERFORMANCE_SCHEMA.SETUP_INSTRUMENTS
WHERE NANE LIKE '%thread_pool%'
;

3、线程池的操作方式

1) MySQL线程池插件的安装方法与其他服务端插件一致,安装在windows系统上使用.dll为后缀的包,安装在UNIX或者类UNIX系统上使用.so为后缀的包.

2) 线程池由多个线程组所组成,线程组的数量可以使用thread_pool_size(默认16)系统变量来配置,其中每个线程组都有一个监视线程(listener thread),用来监听来自客户端的连接;当客户端的连接成功建立以后,线程池使用一种round-robin的方式将其赋给一个线程组;在一个线程组中最多可以有4096个线程(在有的平台上可能会保留一个线程做内部使用)

3) 线程池将客户端连接与线程分隔,在客户端连接与执行由这些客户端发送语句的线程之间没有固定的关系。默认的线程处理方式是将一个客户端连接与线程想关联,从这个客户端连接发送来的语句都由与相对应的线程执行。

4) 在每一个线程组中,线程池都会确保在任何时候都至少有一个

  •   每一个线程组中都有一个监视线程,负责监视已经赋到这个线程组的客户端连接发送来的所有语句;当一条语句到达的时候,要么立即被执行,要么被加入到一个等待队列中稍等再执行

        立即执行:如果这条语句是从客户端发送来的唯一语句,并且在等待队列中没有待执行语句或者正在执行的语句

        稍后执行:当语句不能被立即执行时,将会被添加到一个等待队列中等待稍后执行

  • 如果是立即执行,那么这条语句将会由监视线程负责执行(短时间内,当前的线程组没有监视线程)  。如果这条语句在规定的时间内执行完,那么该线程返回去继续监视来自客户端的其他语句,否则线程池会将这条语句判定为延迟执行的,在此时会启动其他线程去继续监视客户端发送来的语句,在必要的时候会创建新的线程。为了确保没有线程组因为延迟执行语句的存在而被阻塞,线程池有一个后台线程周期性的去监控线程组的状态。通过用监视线程去执行一条可以立即执行的语句时,如果这条语句在规定的时间内快速完成,那么就没有必要去创建其他线程;在有较少数量的并发线程场景时,这可以尽可能的确保最高的线程执行效率。当线程池插件启动的时候,它会为每个线程组创建一个监视线程,外加一个后台线程,其他的线程将在必要时创建。
  •  系统变量thread_pool_stall_limit的值确定了"快速执行"的时间范围,线程被认定为延迟的默认时间是60ms,我们可以将其设置到一个最大值6s

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值