mysql -参数thread_cache_size优化方法 小结

 更新时间:2021年03月16日 00:34:46   投稿: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的线程

相关文章

  • mysql删除无用用户的方法实现

    mysql删除无用用户的方法实现

    本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • K8s中MySQL 数据持久化存储的实现

    K8s中MySQL 数据持久化存储的实现

    本文主要介绍了K8s中MySQL 数据持久化存储的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 将旧版MySQL替换为8.0及以上版本保姆级教学

    将旧版MySQL替换为8.0及以上版本保姆级教学

    在部署项目的时候MySQL就会报错,这个时候就要换MySQL的版本了,这篇文章主要给大家介绍了关于将旧版MySQL替换为8.0及以上版本的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • MySQL中的布尔值,怎么存储false或true

    MySQL中的布尔值,怎么存储false或true

    这篇文章主要介绍了MySQL中的布尔值,怎么存储false或true的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • MySQL中Bit数据类型的使用方式

    MySQL中Bit数据类型的使用方式

    这篇文章主要介绍了MySQL中Bit数据类型的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • MySQL中不能创建自增字段的解决方法

    MySQL中不能创建自增字段的解决方法

    这篇文章主要介绍了MySQL中不能创建自动增加字段的解决方法,通过本文可以解决导致auto_increament失败的问题,需要的朋友可以参考下
    2014-09-09
  • MySQL基础之多表查询案例分享

    MySQL基础之多表查询案例分享

    这篇文章主要为大家分享了几个MySQL基础中的多表查询案例,文中的示例代码简洁易懂,对我们学习MySQL有一定的帮助,需要的小伙伴可以了解一下
    2022-10-10
  • mysql数据库备份及恢复命令 mysqldump,source的用法

    mysql数据库备份及恢复命令 mysqldump,source的用法

    mysql数据库备份及恢复命令 mysqldump,source的用法,需要的朋友可以参考下。
    2011-02-02
  • Linux下mysql5.6.24(二进制)自动安装脚本

    Linux下mysql5.6.24(二进制)自动安装脚本

    这篇文章主要为大家详细介绍了Linux环境下mysql5.6.24二进制自动安装脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • MySQL count(*)统计总数问题汇总

    MySQL count(*)统计总数问题汇总

    在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等,这篇文章主要介绍了MySQL count(*)统计总数的问题解析,需要的朋友可以参考下
    2022-09-09

最新评论