最近的项目刚开始上线,以前没觉得什么,现在客户都反应系统反应太慢,需要解决,于是我在服务器查看了一下CPU占用情况,果然,mysql数据库就占了百分之九十六七,所以想到了必须要使CPU占用率降下来。
1.show
mysql> show processlist; +--------+-----------------+--------------------+------+---------+---------+-----------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+-----------------+--------------------+------+---------+---------+-----------------------------+------------------+ | 4522 | event_scheduler | localhost | NULL | Daemon | 2315739 | Waiting for next activation | NULL | | 258137 | CMAbutler | 10.14.85.121:55035 | CMA | Sleep | 5337 | | NULL | | 258138 | CMAbutler | 10.14.85.121:55036 | NULL | Sleep | 5360 | | NULL | | 260446 | root | localhost | NULL | Query | 0 | NULL | show processlist | | 264040 | root | localhost | CMA | Sleep | 0 | | NULL | +--------+-----------------+--------------------+------+---------+---------+-----------------------------+------------------+ 5 rows in set (0.00 sec)
先简单分析一下各列的含义和用途,第一列,id,一个标识,你要kill一个语句的时候很有用。user列,显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。host列,显示这个语句是从哪个ip的哪个端口上发出的。呵呵,可以用来追踪出问题语句的用户。db列,显示这个进程目前连接的是哪个数据库
常见问题
一般是睡眠连接过多,严重消耗mysql服务器资源(主要是cpu,
mysql> show global variables like 'wait_timeout'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 28800 | +---------------+-------+ 1 row in set (0.00 sec)
3.重设值
mysql> set global wait_timeout=200;