MySQL 数据库高负载故障分析
2017-01-09 20:20
274 查看
紧急处理
第一: 先限制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,然后分析报错,找相关人解决。
相关文章推荐
- MySQL 数据库高负载故障分析
- 最近分析数据库问题总结(linux+mysql)
- UCHome中数据库操作类(class_mysql.php)页面的代码分析
- 关于大并发mysql连接引起数据库错误OperationalError: (2003, "Can't connect to MySQL server on 'x.x.x.x (99)")分析
- MySql 官方工具 WorkBench 设计数据库要点分析
- Mysql主从复制从库状态双Yes及seconds_behind_master为0的故障分析
- 对Jbpm数据库应用的简单分析和在Mysql上实现的demo
- MySQL 数据库设计 笔记与总结(1)需求分析
- 数据库未关闭导致的故障分析
- 通过bash脚本分析zabbix数据库,实现服务器每日故障统计
- 数据库监听与PL/SQL连接故障分析
- 主流数据库复制表结构(SqlServer/Mysql/Oracle/Sybase)[语法差异分析]
- mysql主从数据库集群实现读写分离6步分析策略
- MySQL5.5数据库innodb_change_buffering怪异问题分析
- Exchange 2010 数据库副本加载后复制状态一直是失败并搁置故障分析 推荐
- mysql 数据库中索引原理分析说明
- mysql 数据库调试分析
- php与mysql系统中出现大量数据库sleep的空连接问题分析
- Yii实现MySQL多数据库和读写分离实例分析
- 一次enq: CF - contention 导致数据库宕机的故障分析