Mysql查看线程处理情况(show processlist与kill)

1,简介

1)类似performance_schema.replication_applier_status_by_worker表,主从同步的时候出现error,mysql会在其中记录错误信息,用于解决同步问题。
desc performance_schema.replication_applier_status_by_worker
select * from performance_schema.replication_applier_status_by_worker\G;
2)mysql会把当前正在运行的mysql线程信息实时更新到processlist表中。The PROCESSLIST table provides information about which threads are running.
desc information_schema.processlist;
show processlist : 如果当前用户没有process 的privilege,只能看到属于自己的threads info。如果有process权限,则可以看到其他用户的线程信息。
show full processlist == select * from information_schema.processlist;

2,字段说明

Mysql查看线程处理情况(show processlist与kill)_第1张图片
image.png
  1. id - 线程ID。对于慢查询,可以使用kill id来终端该慢sql。
    user - 用户eg:system user用于主从复制,maxscale用于mysql proxy代理,另外我们自己创建的用户root、admin、reader等用户。
    db - 当前线程连接的数据库
    host - 客户端的IP(直连的ip,比如使用了代理,则显示的是代理的ip)
    command - 当前执行的命令,比如最常见的:Sleep,Query,Connect 等,sleep说明线程是空闲的状态,会有一个默认的超时时间。maintains persistent connections比如连接池
    time - 消耗时间,单位秒。(query说明执行查询的时间)
    state - 执行状态Waiting for master to send event;
    Master has sent all binlog to slave; waiting for more updates
    info - 执行的SQL语句。

3,慢查询

1)查找执行超过1分钟的线程信息。
select * from information_schema.processlist where command != 'Sleep' and time > 60 order by time desc;
2)不要轻易kill,注意看是否是system user或者是maxscale等代理监控的用户。
3)确定是慢查询的时候,可以执行kill id的操作。

1)命令行查看慢查询
mysql -ureader -pread -e 'show full processlist' | grep "select "
2)kill慢查询
增加参数| awk '{ if($6>100) print $0 }' | awk '{print $1}' | xargs mysqladmin kill
其中单引号中的被大括号括着的就是awk的语句,注意,其只能被单引号包含。其中的$1..$n表示第几例。注:$0表示整个行。

4,mysql慢查询kill工具。

https://www.percona.com/doc/percona-toolkit/LATEST/index.html
杀慢查询工具,和检测冗余和重复索引的工具。
/usr/local/bin/pt-kill --user root --password root --busy-time 2 --match-command Query --print --kill --victims all --interval 2 --log /opt/mysql_slow_query.txt --daemonize

Mysql查看线程处理情况(show processlist与kill)_第2张图片
image.png

你可能感兴趣的:(Mysql查看线程处理情况(show processlist与kill))