Home > Database > Mysql Tutorial > MySQL 负载过高解决一例

MySQL 负载过高解决一例

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-07 16:47:10
Original
1618 people have browsed it

top命令 查看服务器负载,发现 mysql竟然经常百分之九十几的cpu,引起Mysql 负载这么高的原因,估计主要应该是索引问题和某些变态SQ

发现问题
top命令 查看服务器负载,发现 mysql竟然经常百分之九十几的cpu,引起Mysql 负载这么高的原因,估计主要应该是索引问题和某些变态SQL语句.

排查思路
1. 确定高负载的类型,top命令看负载高是CPU还是IO
2. 检查慢查询日志,如果前端上了新代码,可能是慢查询引起负载高。
3. 检查硬件问题,是否磁盘故障问题造成的。
4. 检查监控平台,对比此机器不同时间的负载。

记录慢查询
编辑Mysql 配置文件(my.cnf),在[mysqld]字段添加以下几行:
log_slow_queries = /usr/local/mysql/var/slow_queries.log #慢查询日志路径
long_query_time = 5 #记录SQL查询超过5s的语句
log-queries-not-using-indexes = 1 #记录没有使用索引的sql

查看慢查询日志

  • tail /usr/local/mysql/var/slow_queries.log
  • # Time: 130308 7:56:39
    # User@Host: user[xxxx] @ xxxx[]
    # Query_time: 0.001118 Lock_time: 0.000301 Rows_sent: 26 Rows_examined: 52
    SET timestamp=1362711399;
    SELECT
    主要看扫描行数多的语句,然后去数据库加上对应的索引,再优化下变态的sql 语句。

    极端情况kill sql进程
    找出占用cpu时间过长的sql,在mysql 下执行如下命令:

  • show processlist;
  • 确定后一条sql处于Query状态,且Time时间过长,,锁定它的ID,执行如下命令:

  • kill QUERY 269815764;
  • 注意:杀死 sql进程,可能导致数据丢失,所以执行前要衡量数据的重要性。

    linux

    source:php.cn
    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Popular Tutorials
    More>
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template