######################

当前会话的线程id,也就是会话id

  1. select connection_id();

###########################

  1. select * from information_schema.processlist
  2. show full processlist
  1. # 获得
    select user,substring_index(host,':',1) as ip,count(1) as total from information_schema.processlist group by ip order by total desc\G;
  1. -- 查询非 Sleep 状态的链接,按消耗时间倒序展示,自己加条件过滤
  2. select id, db, user, host, command, time, state, info from information_schema.processlist where command != 'Sleep' order by time desc\G;

确定了连接信息来源,下面就开始分析信息统计维度。查看processlist这个表,表结构如下(以MySQL5.6为例,MariaDB可能有额外的信息):

  • ID:线程ID,这个信息对统计来说没有太大作用
  • USER:连接使用的账号,这个是一个统计维度,用于统计来自每个账号的连接数
  • HOST:连接客户端的IP/hostname+网络端口号,这也是一个统计维度,用于确定发起连接的客户端
  • DB:连接使用的default database,DB通常对应具体服务,可以用于判断服务的连接分布,这算一个统计维度
  • COMMAND:连接的动作,实际上是说连接处于哪个阶段,常见的有Sleep、Query、Connect、Statistics等,这也是一个统计维度,主要用于判断连接是否处于空闲状态
  • TIME:连接处于当前状态的时间,单位是s,这个在后面进行分析,暂不算在连接状态的统计维度中
  • STATE:连接的状态,表示当前MySQl连接正在做什么操作,这算一个统计维度,可能的值也比较多,详细可以查阅官方文档
  • INFO:连接正在执行的SQL,这个在下一节分析,暂不算在连接状态的统计维度中

通过上面的分析,总结出了5个连接的统计维度:user、host、db、command和state。有了这5个统计维度,我们就可以开始着手写小工具了。

  1. # 直接杀掉某个mysql线程,先找到目标线程id
  2. show full processlist\G;
  3.  
  4. # 先登录上mysql服务,然后执行
  5. kill 线程id
  
  1. state列:
  2. 语句执行的某个状态一个sql语句,以查询为例,可能需要经过copying to tmp tableSorting resultSending data等状态才可以完成。状态如下:
  3. Checking table
  4. 正在检查数据表(这是自动的)。
  5. Closing tables
  6. 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。
  7. Connect Out
  8. 复制从服务器正在连接主服务器。
  9. Copying to tmp table on disk
  10. 由于临时结果集大于 tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。
  11. Creating tmp table
  12. 正在创建临时表以存放部分查询结果。
  13. deleting from main table
  14. 服务器正在执行多表删除中的第一部分,刚删除第一个表。
  15. deleting from reference tables
  16. 服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
  17. Flushing tables
  18. 正在执行 FLUSH TABLES,等待其他线程关闭数据表。
  19. Killed
  20. 发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志 位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在锁释放时马上生效。
  21. Locked
  22. 被其他查询锁住了。
  23. Sending data
  24. 正在处理 SELECT 查询的记录,同时正在把结果发送给客户端。
  25. Sorting for group
  26. 正在为 GROUP BY 做排序。
  27. Sorting for order
  28. 正在为 ORDER BY 做排序。
  29. Opening tables
  30. 这个过程应该会很快,除非受到其他因素的干扰。例如,在执 ALTER TABLE LOCK TABLE 语句行完以前,数据表无法被其他线程打开。 正尝试打开一个表。
  31. Removing duplicates
  32. 正在执行一个 SELECT DISTINCT 方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后再把结果发送给客户端。
  33. Reopen table
  34. 获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。
  35. Repair by sorting
  36. 修复指令正在排序以创建索引。
  37. Repair with keycache
  38. 修复指令正在利用索引缓存一个一个地创建新索引。它会比 Repair by sorting 慢些。
  39. Searching rows for update
  40. 正在讲符合条件的记录找出来以备更新。它必须在 UPDATE 要修改相关的记录之前就完成了。
  41. Sleeping
  42. 正在等待客户端发送新请求.
  43. System lock
  44. 正在等待取得一个外部的系统锁。如果当前没有运行多个 mysqld 服务器同时请求同一个表,那么可以通过增加 --skip-external-locking参数来禁止外部系统锁。
  45. Upgrading lock
  46. INSERT DELAYED 正在尝试取得一个锁表以插入新记录。
  47. Updating
  48. 正在搜索匹配的记录,并且修改它们。
  49. User Lock
  50. 正在等待 GET_LOCK()。
  51. Waiting for tables
  52. 该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种 情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE
  53. waiting for handler insert
  54. INSERT DELAYED 已经处理完了所有待处理的插入操作,正在等待新的请求。
  55.  
  56. 大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。

processlist的更多相关文章

  1. Mysql 中 show full processlist

    processlist命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令. 1. 进入MySQL/bin目录下输入mysqladmin processlist; ...

  2. MySQL show processlist命令详解

    show processlist; 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令. 方式1:进入mysql/bin目录下输入mysqladmin proc ...

  3. show processlist 其中status详解(适用于所有概况)

    mysql show processlist分析 2011-04-11 16:13:00 分类: Mysql/postgreSQL mysql> show processlist; +—–+—— ...

  4. show processlist

    mysql> show processlist; #mysql服务器查看有那些主机连进来,并列出它们查什么库 +-----+------+-----------+------+--------- ...

  5. mysql 执行状态分析 show processlist

    SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到所有线程.否则,您只能看到您自己的线程( ...

  6. MySql使用show processlist查看正在执行的Sql语句

    今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...

  7. Using SHOW PROCESSLIST and mysqladmin debug Output in Conjunction with SHOW INNODB STATUS

    When InnoDB appears hung, I know the natural reaction is to check SHOW ENGINE INNODB STATUS. In fact ...

  8. 查询processlist具体信息

    SELECT * FROM information_schema.PROCESSLIST WHERE HOST LIKE '%172.16.10.22%' AND COMMAND <> ' ...

  9. mysql show processlist 命令详解

    命令格式 SHOW [FULL] PROCESSLIST SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPE ...

  10. 批量kill mysql processlist进程

    如果大批量的操作能够通过一系列的select语句产生,那么理论上就能对这些结果批量处理.但是mysql并没用提供eval这样的对结果集进行分析操作的功能.所以只能现将select结果保存到临时文件中, ...

随机推荐

  1. <数据分析>初级入门

    1.何为数据分析? 数据分析是指用适当的统计方法对收集来的大量数据进行分析,将它们加以汇总和理解消化,以求最大化地开发数据的功能,发挥数据的作用. 直接的理解:提炼杂乱无章的数据背后的信息,总结出研究 ...

  2. linux及windows安装maven

    一.linux安装maven 1.wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6. ...

  3. 【笔记篇】Ubuntu一日游

    今天做数据的时候在Windows下出问题了(好像是爆栈了QAQ) 于是乎就打开了自己的Ubuntu虚拟机… 然而沉迷Windows的我已经忘记自己对这台虚拟机做过什么(比如装残了一个ycm自己都不知道 ...

  4. pg总览

    一.编译安装初始化等 ./configure --prefix=/release --with-openssl --without-ldap --with-libxml - -enable-threa ...

  5. [JZOJ2702] 【GDKOI2012模拟02.01】探险

    题目 题目大意 给你一个每条边正反权值不一定相同的无向图,求起点为111点的最小环. 思考历程 一看到这题,就觉得是一个经典模型. 然后思考先前做过最小环的经历,发现没个卵用. 我突然想到,既然这一个 ...

  6. 0823NOIP模拟测试赛后总结

    考了两场感觉虚了... NOIP模拟测试30 分着考的. 就只有T2的美妙的暴力拿分了,60分rank10,挂了. T1是一道sb题,爆零了十分遗憾. 许多人都掉进了输出格式的坑里,C没大写.少个空格 ...

  7. C++指针类型间强制转换

    深入理解指针类型间的转换 C++中指针的强制转换 强制类型转换(int).(int&)和(int*)的区别 内存中的地址 地址的本质就是一串0和1的机器代码,内存中的地址没有明确数据类型,但地 ...

  8. PHPstorm同步服务器代码的缺点---命名空间undefined

      在把一个服务器的代码同步到phpstorm下开发的时候,发现新建的命名空间代码都失效了,然而换到 https://blog.csdn.net/afraid_to_have/article/deta ...

  9. Java英语面试题(核心知识篇)

    Java英语面试题(核心知识篇) Question: What is transient variable?Answer: Transient variable can't be serialize. ...

  10. PAT甲级——A1002 A+B for Polynomials

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...