1.thread_cache_size简介
每建立一个连接,都需要一个线程来与之匹配,此参数用来缓存空闲的线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL就会很快的响应连接请求。
show status like 'Threads%';
show global status like 'Thread%';
可以看到
Threads_cached 68
Threads_connected 310
Threads_created 378
Threads_running 8
- Threads_cached :代表当前此时此刻线程缓存中有多少空闲线程。
- Threads_connected :代表当前已建立连接的数量,因为一个连接就需要一个线程,所以也可以看成当前被使用的线程数。
- Threads_created :代表从最近一次服务启动,已创建线程的数量。为处理连接请求创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值。
- Threads_running :代表当前激活的(非睡眠状态)线程数。并不是代表正在使用的线程数,有时候连接已建立,但是连接处于sleep状态,这里相对应的线程也是sleep状态。
2.线程缓存未命中率
线程缓存未命中率=Threads_created /Connections
=378/65660=0.005756929637526652=6%还算合理
show global status like 'Connections%';
3.thread_cache_size设置原则
如果是短连接,适当设置大一点,因为短连接往往需要不停创建,不停销毁,如果大一点,连接线程都处于取用状态,不需要重新创建和销毁,所以对性能肯定是比较大的提升。
对于长连接,不能保证连接的稳定性,所以设置这参数还是有一定必要,可能连接池的问题,会导致连接数据库的不稳定性,也会出现频繁的创建和销毁,但这个情况比较少,如果是长连接,可以设置成小一点,一般在50-100左右。
物理内存设置规则:通过比较Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。(-->表示要调整的值) 根据物理内存设置规则如下:
1G ---> 8
2G ---> 16
3G ---> 32
>3G ---> 64
查询thread_cache_size设置
show global status like'thread_cache_size';
设置命令:
mysql> set global thread_cache_size=16
编辑/etc/my.cnf 更改/添加 thread_concurrency = 16