Mysql线程池

我们知道,随着数据库访问量越来越大,响应速度会越来越慢,同时访问量大到一定程度时,吞吐量会急剧下降。
我们建立一个数据库连接就会建立一个线程,请求结束后销毁进程。以前也有一种连接池,是在客户端设置的。他可以从缓存中取得,用完不销毁。减少频繁的创建和销毁进程。但是对于高并发时,还是无法保护数据库(雪崩)。
而线程池的一个重要作用就是限制了并发进程数,其他的线程要排队,对数据库起到保护作用。

线程池结构
一个线程池包括:一个timer线程和多个线程组。每个线程组包括一个高优先级队列,一个低优先级队列,一个listener线程和多个worker进程。

其中;
队列:存放待执行的IO任务,高优先级队列的会优先处理。一般,体现事务原子性的语句,太久没执行的语句会放到高优先级队列中。

listener线程:用于监听该线程组的语句,如果队列中待执行语句为0,则该线程转变为worker进程,执行语句。如果队列中待执行语句不为0,则把语句放到队列中,这减少了线程的创建。

worker线程是真正执行动作的线程。

timer线程:用于周期性检查该线程组是否处于阻塞状态。一旦发生阻塞,就会新建一个worker线程或者唤醒一个worker进程处理队列中任务。
具体的,每次worker线程执行时,count会加一,而timer检查完后将count置为零。如果下次timer检查是发现队列不为空但是count是0,说明任务被阻塞了。

工作流程
综合来说,线程池是怎么工作的呢?
首先,一个请求连接会根据id%线程组数,确定他被分配到哪个组中。然后listener进程判断是否执行这个连接,如果队列中待执行语句为0,则该线程转变为worker进程,执行语句。如果队列中待执行语句不为0,则把语句放到队列中。
在这其中,如果一个worker进程很久(默认60s)没有被唤醒,就会自动退出,当然如果请求时发现超过最大数量限制(默认100000),也不会被唤醒。
同时,timer周期性检查该线程组是否处于阻塞状态(默认500ms).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 5.6及以上本支持线程池,可以通过以下步骤配置: 1. 打开MySQL配置文件my.cnf,在[mysqld]下添加如下配置: ``` thread_handling=pool-of-threads thread_pool_max_threads=100 thread_pool_idle_timeout=60 ``` - `thread_handling` 指定线程池的工作模式,pool-of-threads表示启用线程池; - `thread_pool_max_threads` 指定线程池最多可以创建的线程数; - `thread_pool_idle_timeout` 指定线程池中空闲线程的超时时间,单位为秒。 2. 重启MySQL服务,使配置生效。 注意事项: - 线程池模式不适用于所有情况,需要根据具体场景进行测试和评估。 - 在高并发情况下,线程池的性能表现通常优于线程模式,但是在低并发情况下,线程池的性能可能会有所下降。 - 线程池的配置需要根据服务器硬件性能和应用负载情况进行调整,不同的应用场景可能需要不同的配置参数。 ### 回答2: MySQL线程池MySQL数据库中的一个重要配置参数,旨在提高数据库的并发处理能力。 要配置MySQL线程池,需要修改MySQL的配置文件my.cnf。以下是配置MySQL线程池的步骤: 1. 打开MySQL的配置文件my.cnf。在Linux系统上,该文件通常位于/etc/mysql/my.cnf。 2. 在文件中找到[mysqld]或[mysql]的段落,这是数据库服务器的配置段落。 3. 在[mysqld]或[mysql]段落下添加以下配置行: thread_handling = pool-of-threads thread_pool_size = 数字 - thread_handling用于指定MySQL线程池的处理方式,"pool-of-threads"表示启用线程池。 - thread_pool_size用于指定线程池的大小,即同时处理连接的最大线程数。根据系统的性能,可以设置适当的数值。 4. 保存并关闭my.cnf文件。 5. 重启MySQL服务,使配置生效。 配置MySQL线程池后,数据库服务器将使用线程池来处理客户端的连接请求。线程池会根据线程池大小的配置,同时处理多个连接,提高数据库的并发处理能力。 需要注意的是,在配置MySQL线程池时,应根据系统的实际情况来设置线程池的大小。如果线程池设置过大,可能导致资源浪费;如果线程池设置过小,可能影响并发处理能力。因此,需要根据数据库服务器的硬件配置、负载以及应用程序的特点来调整线程池的大小,以达到最佳性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值