mysql系统调优之thread_cache_size

背景

近期客户的大数据任务调度应用系统出现问题,调度任务失败,任务没有正常执行,产品组同事去看应用日志也没发现错误日志.后来检查msql server日志

发现有很多节点连接报 error reading communication 和time out reading错误

首先查看mysql server连接数

 

引申

当时看了这个参数 11505这个值就觉得不太可能是这个连接数值,就看着从测试环境验证一下

结果39w多,由于测试环境库没什么应用在连,所以这个数字不可能是当前的连接数,直接上官网查定义:

The number of connection attempts (successful or not) to the MySQL server.

应该是历史试图连接到mysql的连接数

所以就查看其他参数 ,用show global status like '%threads%'  命令

 

发现 这个Threads_created 值和connections值很接近,就去查了下其含义:

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

 

找到目标参数

 

线程缓存未命中率=Threads_created /Connections

这么一算发现 测试环境的未命中率90%以上,然后看thread_cache_size值竟然是0 。所以赶紧去现场环境看看被重装的mysql这个变量设置了没有

还好有设置:

进一步查看

由此计算出现场的未命中率=373/13027 =2%,说明thread_cache_size 设置的还是比较合理的

 

thread_cache_size原理

 

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

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

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值