Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > thread_cache_size优化

mysql -参数thread_cache_size优化方法 小结

投稿:mdxy-dxy

以下是某门户网站的mysql状态实例及分析过程,绝对的第一手数据资料,很生动的体现了参数thread_cache_size优化的效果及优化该参数的必要性,希望对各位系统管理员能有帮助。

全局,动态,默认值-1表示自动调整大小,公式:8 + (max_connections / 100)。
最小值0,最大值16384,查看当前:

MySQL [(none)]> show variables like 'thread_cach%';
+-------------------+-------+
| Variable_name   | Value |
+-------------------+-------+
| thread_cache_size | 64  |
+-------------------+-------+

在经常创建新的连接的情况下,提高该值可提高mysql性能,因为减少了连接的分配,但使用了java的连接池等,性能提升没那么显著。如果每秒有上百的连接,需要将该值设置足够高。

#尝试连接次数,无论是否成功连接
MySQL [(none)]> show global status like 'connections';
+---------------+-----------+
| Variable_name | Value   |
+---------------+-----------+
| Connections  | 177312707 |
+---------------+-----------+
1 row in set (0.00 sec)

MySQL [(none)]> show global status like 'thread%';
+-------------------+--------+
| Variable_name   | Value |
+-------------------+--------+
| Threads_cached  | 49   | #线程缓存中的空闲线程数
| Threads_connected | 416  | #当前打开的连接数
| Threads_created  | 208872 | #创建连接的线程数,如果很大,需要添加thread_cache_size大小
| Threads_running  | 5   | #当前未休眠的连接
+-------------------+--------+

通过检查Connections和Threads_created状态变量之间的差异,您可以看到线程缓存的效率,越小越好

MySQL [(none)]> select 208872/177312707;
+------------------+
| 208872/177312707 |
+------------------+
|      0.0012 |
+------------------+

下面是一些补充说明:

根据调查发现以上服务器线程缓存thread_cache_size没有进行设置,或者设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。(-->表示要调整的值) 根据物理内存设置规则如下:

1G ---> 8
2G ---> 16
3G ---> 32
>3G ---> 64

优化方法:

1、mysql> set global thread_cache_size=16
2、编辑/etc/my.cnf 更改/添加

thread_concurrency = 16

1、MySQL服务器的线程数查看方法:

show  global status like 'Thread%';

Threads_created:创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值

2、优化参数thread_cache_size

thread_cache_size:当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)

即可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能。

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';

优化方法:

1、mysql> set global thread_cache_size=16
2、编辑/etc/my.cnf 更改/添加
thread_concurrency = 16

3、mysql kill线程

mysqladmin start slave stop slave kill某个连接到mysqlServer的线程

您可能感兴趣的文章:
阅读全文