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;

故障分析

注:一般mysql的配置文件都是初始配置好的,紧急处理的方法有可能不适用,这事就要分析突然产生高负载的原因有哪些?

  • 分析思路:
1、查看mysql的slow.log,看是否出现死锁,及其他报错
2、show processlist; 查看mysql都有哪些连接,判断这些connect是否正常
3、通过使用htop、dstat等命令查看负载高来源是CPU还是IO

htop、dstat 使用

epel源下载htop

# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm

yum install htop dstat -y

htop是加强版的top,这里对其使用不错介绍

  • dstat常用命令
dstat -l -m -r -c  --top-io --top-mem --top-cpu
  • tcpdump使用

抓包分析,默认mysql端口为3306

tcpdump -i eth0 -A -s 3000 port 3306 > /tmp/sql.log
  • 引用perl
tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) {
    if (defined $q) { print "$qn"; }
    $q=$_;
    } else {
    $_ =~ s/^[ t]+//; $q.=" $_";
    }
}'

# 这里引用,找到最频繁的SQL语句
  • 使用strace 或 pstack查看具体进程状态

查看系统调用是否有问题,进程是否堵塞,是否有Broken pipe

strace -p 22222
  • pt-query-digest

分析mysql慢日志,查看哪些sql语句最耗时

pt-query-digest db-slow.log

总结: 有时候不需要全部操作就能找到问题的所在,这次故障中个人是通过show processlist找到不正常的连接,查看是从哪里连过来的,然后到特定的服务器上,查看指定的那个服务状态是否正常。

故障分析:后端API服务抛异常,导致一个SELECT频繁去执行,先重启后端API,然后分析报错,找相关人解决。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏kl的专栏

mysql日志binlog消费初体验

早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从20...

6938
来自专栏大数据挖掘DT机器学习

手把手教你成功搭建Hadoop-2.2集群

作者:白宁超 成都信息工程大学硕士 原文:http://www.cnblogs.com/baiboy/p/4639474.html hadoop集群配置系列...

4036
来自专栏cloudskyme

maven parent

5.2.parent artifactId 父项目的artifact标识符 groupId 父项目的group标识符 v...

29510
来自专栏木子昭的博客

美轮美奂的Arch, 详解Arch虚拟机安装

4855
来自专栏京东技术

Vitess告诉你两阶段提交到底长啥样

● 原子性:一个事务对状态的改变是原子的,要么都发生,要么都不发生,这些改变包括数据库的改变、消息以及对转换器的操作。

2512
来自专栏崔庆才的专栏

腾讯云Ubuntu下WordPress从Apache迁移到Nginx过程

需求之前一直都用Apache服务器,由于网站访问量比较大,另外加上旧服务器快到期了,准备迁移到新的服务器上,所以决定采用Nginx服务器。迁移过程比较心酸,之前...

4720
来自专栏LanceToBigData

MySQL(一)之MySQL简介与安装

大家可能都在用MySQL,其实我也是在用MySQL的,但是你知道吗?大部分人都是在windows中使用,这里将介绍一下在windows中的安装分为安装包安装与M...

2016
来自专栏乐沙弥的世界

Oracle 常见故障及日常规划

对任何数据库系统而言,对显而易见的故障,应当避免发生本文列出了Oracle常见的故障并给出了解决方案,同时列出了一些日常规划。

642
来自专栏数据和云

深入内核:监听器的工作原理与故障诊断分析

熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 在Oracle的官方文档《Oracle Database PerformanceT...

4217
来自专栏文渊之博

数据库复制(一)--复制介绍

介绍: 在运行着的数据库驱动的应用程序中,SQL复制能解决许多问题。由于发送/订阅的模式不是十分容易理解,复杂的脚本语言和监视复制系统也是需要一定的思想在里面。...

1806

扫码关注云+社区