高并发下mysql服务器的优化

如果不是高并发请忽略本博客,因为公司在几分钟内高并发几十万访问导致服务器直接炸了!后果很严重,虽然mysql服务器优化杯水车薪,但我觉得这个是有必要知道的!那么如果线上项目炸了你想过是哪些环节出了问题吗?

①宽带不足以高并发

②服务器环境挂了,如LNMP环节挂了, php-fpm之类的挂了

③Mysql服务器挂了,因为多台mysql服务器做负载均衡,发现会存在只读库挂的情况导致服务提供客户度超级卡顿(主从同步有延迟导致只读库直接被腾讯云认为该服务器挂机处理)

④php代码死循环。

⑤小项目使用持续数据库链接no毛病;大项目使用持续链接biss.

思路过程:是否存在问题-》分析问题-》如何处理-》处理问题-》背后原理。

下面进入正题,说到mysql服务器它肯定也是有内存,而且mysql服务器支持的连接数也是有上限的,然而每个数据连接都是要占内存的,那么当存在大量连接时如果不及时释放;那么就有可能出现“too many connections";
直接挂机。(很多情况是sleep进程太多造成的连接数超限)

查看是否存在sleep进程:
show processlist;//查看Command列是否sleep的居多


//可参看:https://blog.csdn.net/qq_24613517/article/details/80711162
先使用命令在navicat中分析sleep进程的问题:
show variables like "%timeout%";
你会发现:wait_timeout=28800也就是8小时才会回收那些sleep的mysql进程。


那么问题来了如何去处理这个问题?
方案一:修改my.cnf的配置然后重启服务器,如果是线上项目这个方案直接pass掉
方案二:使用超级管理员权限在navicat中使用命令: set global wait_timeout=120;//2小时回收
方案三:代码中使用完立马mysql_close();在使用php连接mysql的时候,尽量不要使用pconnect的方式,使用pconnect的方式,即使你的调用mysql_close()也是无法释放数据库连接的,那么mysql中的死连接的数量就会越来越多


那么是什么造成了sleep进程多,下面是官方解释:
1.客户端程序在退出之前没有调用mysql_close().
2.客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器. 
3.客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了. 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值