Mysql 线程池

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是最优的。

update stock set count = count - 1 where skuId = 1 AND count>0;

Mysql 线程池_第1张图片

开启线程池功能

我们下载的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%'; 线程线程池的信息; 

Mysql 线程池_第2张图片

Threadpool_idle_threads-->目前thread pool中还剩余多少个空闲thread
Threadpool_threads -->thread pool中允许同时running的最大线程数

你可能感兴趣的:(mysql,数据库,database)