一.查看进程
登录mysql
mysql -uroot -ppassword
查看进程
mysql> show processlist;
各字段的含义:
1.id 该进程的标识;
2.user 显示当前用户
3.host 显示来源IP和端口
4.db 显示当前连接的数据库
5.command 显示当前连接的执行的命令,休眠 sleep ,查询 query ,连接 connect
6.time 此这个状态持续的时间,单位是秒
7.state列 显示使用当前连接的sql语句的状态,很重要的列,详见下面state列的含义
8.info 显示sql语句,长sql可能显示不全
state列的含义:
1.analyzing 比如进行analyze table时
2.checking table 线程正在执行表检查操作
3.cleaning up 正准备释放内存
4.closing tables 应该是一个快速的操作,如果不是这样的话,则应该检查硬盘空间是否已满或者磁盘io是否达到瓶颈
5.copy to tmp table 线程正在处理一个alter table语句
6.copying to tmp table 线程将数据写入内存中的临时表
7.copying to tmp table on disk 线程正在将数据写入磁盘中的临时表。与tmp_table_size参数有关系
8.creating sort index 线程正在使用内部临时表处理一个select操作
9.fulltext initialization 服务器正准备进行自然语言全文索引
10.sending data 线程正在读取和处理一条select语句的行,并且将数据发送至客户端,在此期间会执行大量的磁盘访问
11.sorting index 线程正在对索引页进行排序
12.updating 线程寻找更新匹配的行进行更新
13.waiting for lock_type lock 等待各个种类的表锁当state列为waiting for lock_type lock时,表示某个SQL正在query导致别的SQL等待锁,需要根据id杀进程。
二.杀进程
1.杀单个进程
mysql> kill 127402;
2.杀多个进程,组装kill语句
select concat('kill ',id,';') from information_schema.processlist where user='root' and state='waiting for lock_type lock';
执行组装后的kill语句
三.其他有用命令
查看被锁的表
mysql> show open tables where in_use > 0;
查看当前的事务
mysql> select * from information_schema.innodb_trx;
查看被锁的事务
mysql> select * from information_schema.innodb_locks;
查看等锁的事务
mysql> select * from information_schema.innodb_lock_waits;