Heim >Datenbank >MySQL-Tutorial >MySQL 负载过高解决一例

MySQL 负载过高解决一例

WBOY
WBOYOriginal
2016-06-07 16:47:101589Durchsuche

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

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn