今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的。

比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命令查看了当前正在执行的sql语句,从而定位到了对应的程序,发现代码中有一个死循环在不停的查询导致cpu占用99%,原因找到了问题就好解决了。

这里简单的记录一下processlist的用法:

processlist 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令。

1.        进入 mysql/bin 目录下输入 mysqladmin processlist;

2.        启动 mysql ,输入 show processlist;

如果有 SUPER 权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的 MySQL 帐户运行的线程)。

得到数据形式如下(只截取了三 条):

mysql> show processlist;

+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------

| Id | User  | Host             | db    | Command | Time| State      | Info

+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------

|207|root  |192.168.0.20:51718 |mytest | Sleep     | 5     |          | NULL

|208|root  |192.168.0.20:51719 |mytest | Sleep    | 5    |          | NULL

|220|root  |192.168.0.20:51731 |mytest |Query    | 84   | Locked  |

select bookname,culture,value,type  from book where id=001

先简单说一下各列的含义和用途,第一列, id , 不用说了吧,一个标识,你要 kill 一个语句的时候很有用。 user列, 显示单前用户,如果不是 root ,这个命令就只显示你权限范围内的 sql 语 句。 host 列,显示这个语句是从哪个 ip 的哪 个端口上发出的。呵呵,可以用来追踪出问题语句的用户。 db 列,显示这个进程目前连接的是 哪个数据库 。command 列,显示当前连接的执行的命令,一般就是休眠( sleep ),查询( query ),连接( connect )。 time 列,此这个状态持续的时间,单位是秒。 state 列,显示使用当前连接的 sql 语句的状态,很重要的列,后续会有所有的状态的描述,请注意, state 只是语句执行中的某一个状态,一个 sql 语 句,已查询为例,可能需要经过 copying to tmp table ,Sorting result , Sending data 等状态才 可以完成, info 列,显示这个 sql 语 句,因为长度有限,所以长的 sql 语句就显示不全,但是一个判断问题语句的重要依据。

当MySQL繁忙的时候运行show processlist,会发现有很多行输出,每行输出对应一个MySQL连接。怎么诊断发起连接的进程是哪个?它当前正在干嘛呢?

首先,需要通过TCP Socket而不是Unix Socket连接MySQL,这样在show processlist的输出中就会有来源端口号。如下,

mysql> show processlist;
+——–+——–+—————–+——+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+——–+——–+—————–+——+———+——+——-+——————+
| 277801 | mydbuser | localhost:35558 | mydb | Sleep | 1 | | NULL |
| 277804 | mydbuser | localhost:35561 | mydb | Sleep | 1 | | NULL |
| 277805 | mydbuser | localhost:35562 | mydb | Sleep | 0 | | NULL |
+——–+——–+—————–+——+———+——+——-+——————+

在Host列有来源IP和端口号,然后我们从连接机器查看端口号是谁打开的,

[root@localhost ~]# netstat -ntp | grep 35558
… 124.115.0.68:35558 ESTABLISHED 18783/httpd

可知进程18783发起的MySQL连接来源端口是35558,然后就可以用strace观察这个进程了。如果是Apache的PHP脚本,还可以 用proctitle模块( http://pecl.php.net/package/proctitle/ )设置脚本的状态信息。

lsof也能根据端口号显示进程号,细节请参考手册。

MySql使用show processlist查看正在执行的Sql语句的更多相关文章

  1. mysql查看正在执行的sql语句

    有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; ...

  2. 两种方式:mysql查看正在执行的sql语句

    mysql查看正在执行的sql语句 2015年08月21日 17:32:59 阅读数:15398   有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应 ...

  3. Oracle 查看正在执行的SQL语句

    SELECT A.MACHINE, username,a.SID,a.SERIAL#, sql_text,LOGON_TIME from v$session a, v$sql b where a.sq ...

  4. 查看正在执行的sql语句

    ;WITH t AS( SELECT [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), [User] = nt_username, [ ...

  5. django框架 - 实时查看执行的sql语句

    django框架采用的ORM模型,我们可以通过mysql的日志记录实时看到执行的sql语句,具体步骤如下: 第一步:找到mysql的配置文件 第二步:编辑mysql配置文件 第三步:重启mysql 第 ...

  6. MySQL查看正在执行的SQL进程

    查看正在执行的SQL进程: show processlist; 查出来之后, 可以使用下面的命令终止SQL进程: kill ${进程ID}

  7. mysql怎么终止当前正在执行的sql语句

    mysql怎么终止当前正在执行的sql语句 show processlist; kill 要杀的ID kill 7

  8. 监控mysql执行的sql语句

    linux平台 监控mysql执行的sql语句   为了做好配合开发做性能和功能测试,方便监控正在执行的sql语句, 可以在/etc/mysqld中添加如下:  log =/usr/local/mys ...

  9. mysql(1)—— 详解一条sql语句的执行过程

    SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...

随机推荐

  1. [笔记]PHP文件系统处理

    PHP文件系统处理 ***所有的文件处理都是使用系统函数完成的. ***php文件处理 是 基于linux/unix系统为模型的, 在linux下完全没问题 在windows下有一些 有差别. ### ...

  2. [Mongo] How to Install Mongo on Debian(不要安装)

    Install MongoDB on Debian¶ This tutorial outlines the steps to install MongoDB on Debian systems. Th ...

  3. django form使用学习记录

    Django forms使用容易, 又方便扩展, 因此Django admin和CBVs基本都基于forms使用. 事实上, 由于django forms的强大验证功能, 大多数Django API ...

  4. Delphi 线程同步技术(转)

    上次跟大家分享了线程的标准代码,其实在线程的使用中最重要的是线程的同步问题,如果你在使用线程后,发现你的界面经常被卡死,或者无法显示出来,显示混乱,你的使用的变量值老是不按预想的变化,结果往往出乎意料 ...

  5. mysql命令行操作

    显示数据库    show databases;当前数据库 select database(); 显示表    show tables;更改表名称    alter table 原表名 rename ...

  6. html 关于块级元素和行内元素

    常用的行内元素要记住:a.span.img.input.lable.select.strong.textarea 常用的块级元素要记住:div.h1~h6.dl.ul.ol 例如在一个title中,有 ...

  7. JavaScript中统计Textarea字数并提示还能输入的字符

    <span style="font-size:18px;"><script language="javascript"> functio ...

  8. ecshop后台增加模板页的方法

    CShop的动态模板机制是一个非常灵活的系统,管理员可以在后台根据自己的要求调整模板模块的显示位置.本文详细讲解了如何修改ECSHOP内部结构使得用户可以添加自己的模板页从而方便灵活的使用系统自带的模 ...

  9. java 错误集锦

    Exception in thread "main" java.lang.Error: Unresolved compilation problem: at com.niuniu. ...

  10. [lua]lua简介

    在这篇文章中,我想向大家介绍如何进行Lua程序设计.我假设大家都学过至少一门编程语言,比如Basic或C,特别是C.因为Lua的最大用途是在宿主程序中作为脚本使用的. Lua 的语法比较简单,学习起来 ...