好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MySQL show processlist

processlist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态帮助识别出有问题的查询语句等。( processlist 返回的结果是实时变化的,是对mysql链接执行的现场快照,所以用来处理突发事件非常有用。 )

如果是root帐号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。show processlist只能列出当前100条。

如果想全部列出,可以使用SHOW FULL PROCESSLIST命令。

这个sql,一般就是充当救火队员的角色,解决一些突发性的问题。

  它可以查看当前mysql的一些运行情况,是否有压力,都在执行什么sql,语句耗时几何,有没有慢sql在执行等等。

当发现一些执行时间很长的sql时,就需要多注意一下了,必要时kill掉,先解决问题。

  命令有三种执行方式:

「1、这种是直接在命令行查询,末尾带\G是表示将查询结果进行按列打印,可以使每个字段打印到单独的行。」

mysql >  show  full   processlist;
  +  --  ------+------+----------------------+-------+---------+------+----------+-----------------------+ 
 |  Id      |   User   |  Host                  |  db     |  Command  |  Time  |  State     |  Info                   | 
 +  --  ------+------+----------------------+-------+---------+------+----------+-----------------------+ 
 |   449000   |  root  |   127.123 . 213.11 : 59828   |  stark  |  Sleep    |   1270   |            |   NULL                    | 
 |   449001   |  root  |   127.123 . 213.11 : 59900   |  stark  |  Sleep    |   1241   |            |   NULL                    | 
 |   449002   |  root  |   127.123 . 213.11 : 59958   |  stark  |  Sleep    |   1216   |            |   NULL                    | 
 |   449003   |  root  |   127.123 . 213.11 : 60088   |  stark  |  Sleep    |   1159   |            |   NULL                    | 
 |   449004   |  root  |   127.123 . 213.11 : 60108   |  stark  |  Sleep    |   1151   |            |   NULL                    | 
 |   449005   |  root  |   127.123 . 213.11 : 60280   |  stark  |  Sleep    |   1076   |            |   NULL                    | 
 |   449006   |  root  |   127.123 . 213.11 : 60286   |  stark  |  Sleep    |   1074   |            |   NULL                    | 
 |   449007   |  root  |   127.123 . 213.11 : 60344   |  stark  |  Sleep    |   1052   |            |   NULL                    | 
 |   449008   |  root  |   127.123 . 213.11 : 60450   |  stark  |  Sleep    |   1005   |            |   NULL                    | 
 |   449009   |  root  |   127.123 . 213.11 : 60498   |  stark  |  Sleep    |    986   |            |   NULL                    | 
 |   449013   |  root  |  localhost             |   NULL    |  Query    |      0   |  starting  |  show  full  processlist  | 
 +  --  ------+------+----------------------+-------+---------+------+----------+-----------------------+ 
 11  rows  in   set  ( 0.01   sec)
mysql  >  show  full   processlist\G;
  ***************************   1 . row  ***************************  
     Id:   449000 
    User  : root
   Host:   127.123 . 213.11 : 59828  
     db: stark
Command: Sleep
   Time:   1283  
  State: 
   Info:   NULL 
 ***************************   2 . row  ***************************  
     Id:   449001 
    User  : root
   Host:   127.123 . 213.11 : 59900  
     db: stark
Command: Sleep
   Time:   1254  
  State: 
   Info:   NULL 

「2、通过查询链接线程相关的表来查看快照」

 SELECT  id, db,  USER , HOST, command, time, state, info  FROM  information_schema. PROCESSLIST  WHERE  command  !=   ‘  Sleep  ‘   ORDER   BY  time  DESC ;

「3、通过navicat中的【工具】=> 【服务器监控】进行查看。」

这种方式比较方便,还可以排序。

简单介绍一下,每列的含义:

Id:链接mysql 服务器线程的唯一标识,可以通过kill来终止此线程的链接。

User:当前线程链接数据库的用户

Host:显示这个语句是从哪个ip 的哪个端口上发出的。可用来追踪出问题语句的用户

db: 线程链接的数据库,如果没有则为null

Command: 显示当前连接的执行的命令,一般就是休眠或空闲(sleep),查询(query),连接(connect)

Time: 线程处在当前状态的时间,单位是秒

State:显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个 sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成

Info: 线程执行的sql语句,如果没有语句执行则为null。这个语句可以使客户端发来的执行语句也可以是内部执行的语句

发现问题之后怎样解决它呢?

1、可以单独kill掉上面有问题的行

 kill   449000 

2、也可以批量结束时间超过3分钟的线程

 --   查询执行时间超过3分钟的线程,然后拼接成 kill 语句 
 select  concat( ‘  kill   ‘ , id,  ‘  ;  ‘  )
  from   information_schema.processlist
  where  command  !=   ‘  Sleep  ‘ 
 and  time  >   3  *  60 
 order   by  time  desc ;
 --  正在running的线程 
 Select   count ( * ) from  information_schema.processlist  where  info  is   not   null  ;
  --  Mysql的全部线程 
 Select   count ( * ) from   information_schema.processlist;
  --  查询当前running sql执行时间最长的10条 
 Select   *   from  information_schema.processlist  where  info  is   not   null   order   by  time  desc   limit10 ;
  --  查询执行sql的ip 的连接数量 
 select   left (host,instr(host,‘:‘) -  1 ) asip, count ( * )  as  num  from  information_schema.processlist  group   by  ip  order   by  num  desc  ;
  --  查询执行sql的user的连接数量 
 select   user , count ( * )  as  num  from   information_schema.processlist  group   by  userorder  by  num  desc  ;
  --  查询执行sql语句的数量 
 select   count ( * )  as  num,info  from   information_schema.processlist  where  info isnot  null   group   by  info  order   by   num;
  --  查询mysql服务器最大连接数、当前数据库连接数和running数show global variables like ‘max_connections‘; 
show global status  like  ‘Threads %  ‘;

  --  查询用户最大连接数 
 
show grants   for  ‘mysql_bi‘;

 

MySQL show processlist

标签:描述   问题   大连   host   row   col   执行sql   端口   root   

查看更多关于MySQL show processlist的详细内容...

  阅读:25次