负载高自动重启mysql_mysql 负载很高应急解决办法

一、应急解决办法

在MySQL数据库连接数很多,而且大多属于活跃的状态时MySQL机器基本上负载很高,属于基本上快要死去的状态了. 这时怎么办呢?

有可能两个办法.

第一: 先限制Innodb的并发处理.如果innodb_thread_concurrency = 0 可以先改成 16或是64 看机器压力,如果 非常大,先改成16让机器的压力下来,然后慢慢增达,适应自已的业务. 处理方法:

set global innodb_thread_concurrency=16;

第二: 对于连接数已经超过600或是更多的情况,可以考虑适当的限制一下连接数,让前端报一下错,也别让DB挂了. DB在了,总是可以用来加载一下数据,当数据加载到了nosql里了,慢慢的DB压力也会降下来的. 限制单用户连接数在500以下. 如:

set global max_user_connections=500;

(MySQL随着连接数的增加性能会是下降的,这也是thread_pool出现的原因) 另外对于有的监控程序会读取information_schema下面的表的程序可以考虑关闭下面的参数 innodb_stats_on_metadata=0

set global innodb_stats_on_metadata=0;

这个参数主要防止对读取information_schema时造成大量读取磁盘进行信息统计(如果慢查询中出现关于information_schema中表时,也可以考虑禁用该参数)

二、问题分析

思路:

1、确定高负载的类型 htop,dstat命令看负载高是CPU还是IO

2、监控具体的sql语句,是insert update 还是 delete导致高负载

3、检查mysql日志

4、检查硬件问题

dstat

可以看到具体是哪个用户哪个进程占用了相关系统资源,当前CPU、内存谁在使用

[root@cc ~]# dstat -l -m -r

-c --top-io --top-mem --top-cpu --io/total-

------memory-usage----- --most-expensive- ----most-expensive----

-most-expensive- read writ| used buff cach free| memory

process | i/o process | cpu process 1.90 267 |3399M 178M 3892M 400M|php-fpm:

poo 372M|init 1682k 647k|flush-202:0 0.1 0 72.0 |3399M 178M 3892M 400M|php-fpm:

poo 372M|php-fpm: po 10k 143k|php-fpm:

pool2.0 0 8.00 |3399M 178M 3892M 399M|php-fpm:

poo 372M|nginx: work 228k 229k|php-fpm:

pool0.5 0 88.0 |3399M 178M 3892M 399M|php-fpm:

poo 372M|nginx: work 102k 166k|php-fpm:

pool 11 0 38.0 |3399M 178M 3892M 399M|php-fpm:

poo 372M|php-fpm: po 787k 650B|php-fpm:

pool4.8 0 0 |3399M 178M 3892M 399M|php-fpm:

poo 372M|php-fpm: po 788k 723B|php-fpm:

pool1.8 0 140 |3400M 178M 3892M 399M|php-fpm:

poo 372M|nginx: work 38k 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值