71.mysql的线程池

发布时间 2023-05-17 16:11:26作者: 站在巨人的肩上Z

mysql的线程池:

  我们默认的线程处理方式是:one-thread-per-connection (服务器使用一个线程处理每个客户端连接),意思就是我们一个连接connection对应一个线程, 然后可以设置最大的connection连接数,max_connections。

  这里有一个问题是,当我们的线程运行比较多的时候,其实往往mysql的QPS(每秒查询sql的次数)会下降,我们可以通过mysqlslap工具进行测试,通过改变不同的线程数量找出最优的QPS。 但是正常环境会有很多的连接,所以我们就需要用到mysql的线程池进行限流。

  例如商城下订单,同时1秒有5000人购买,就有5000个线程修改商品的库存,5000的线程同时去操作,肯定QPS会下降,这时如果我们使用线程池的方式,线程池总共假如只能有50个线程,且50个线程是QPS最快的,这样就进行了限流,提高了我们数据库中的QPS。线程池相对于是一个池塘,一个线程执行完了,然后下一个线程进去执行。就是相当于控制了当前mysql的并行的线程的个数,从而达到mysql的QPS是最优的。
  这里可以通过如下命令查看: 通过一般是: one-thread-per-connection

  show variables like '%thread_handling%'

我们下载的mysql免费版本是不支持mysql线程池的,例如Server version: 5.7.16-log MySQL Community Server (GPL) 我的5.7的版本。

一般我们会用mysql-Percona版本来替代,mysql-Percona是mysql的一个分支版本。

在my.cnf 配置 thread_handling

thread_handling = pool-of-threads

执行 show global status like 'thread%'; 线程线程池的信息;