mysql show processlist分析 2011-04-11 16:13:00

分类: Mysql/postgreSQL

mysql> show processlist;

+—–+————-+——————–+

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

+—–+————-+——————–+

|207|root |192.168.0.2:51621 |mytest | Sleep | 5 | | NULL

|208|root |192.168.0.2:51622 |mytest | Sleep | 5 | | NULL

|220|root |192.168.0.2:51676 |mytest |Query | 84 | locked |

select name,culture,value,type from book where id=1

说明各列的含义和用途,

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语句就显示不全,但是一个判断问题语句的重要依据。

这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:

Checking table

正在检查数据表(这是自动的)。

Closing tables

正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。

Connect Out

复制从服务器正在连接主服务器。

Copying to tmp table on disk

由于临时结果集大于 tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。

Creating tmp table

正在创建临时表以存放部分查询结果。

deleting from main table

服务器正在执行多表删除中的第一部分,刚删除第一个表。

deleting from reference tables

服务器正在执行多表删除中的第二部分,正在删除其他表的记录。

Flushing tables

正在执行 FLUSH TABLES,等待其他线程关闭数据表。

Killed

发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在锁释放时马上生效。

Locked

被其他查询锁住了。

Sending data

正在处理 SELECT 查询的记录,同时正在把结果发送给客户端。

Sorting for group

正在为 GROUP BY 做排序。

Sorting for order

正在为 ORDER BY 做排序。

Opening tables

这个过程应该会很快,除非受到其他因素的干扰。例如,在执 ALTER TABLE 或 LOCK TABLE 语句行完以前,数据表无法被其他线程打开。 正尝试打开一个表。

Removing duplicates

正在执行一个 SELECT DISTINCT 方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后再把结果发送给客户端。

Reopen table

获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。

Repair by sorting

修复指令正在排序以创建索引。

Repair with keycache

修复指令正在利用索引缓存一个一个地创建新索引。它会比 Repair by sorting 慢些。

Searching rows for update

正在讲符合条件的记录找出来以备更新。它必须在 UPDATE 要修改相关的记录之前就完成了。

Sleeping

正在等待客户端发送新请求.

System lock

正在等待取得一个外部的系统锁。如果当前没有运行多个 mysqld 服务器同时请求同一个表,那么可以通过增加 –skip-external-locking参数来禁止外部系统锁。

Upgrading lock

INSERT DELAYED 正在尝试取得一个锁表以插入新记录。

Updating

正在搜索匹配的记录,并且修改它们。

User Lock

正在等待 GET_LOCK()。

Waiting for tables

该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, 或 OPTIMIZE TABLE。

waiting for handler insert

INSERT DELAYED 已经处理完了所有待处理的插入操作,正在等待新的请求。

大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。还有其它的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着。

max_allowed_packet 可以适当加大,

mysql提示Writing to net解决

最近发现某一个数据库cpu占用比较过。超过200%了。

首先查看数据库慢日志,设定慢日志5秒,基本上没有产生日,没有超过5秒的语句。

show processlist;

后发现几条select有几个表查询需要1-2秒,

explain select * from xxx ,发现没有走索引,全表扫描,以前数据量少那会很快就出来了,目前查询总数据都在2万以内,现在数据量大了,其它表都1000w级了,以前只优化了大表的索引,所以问题就突出了。索引建完后CPU明显示下降,据我了解,msyql   cpu占用高,80%的情况未使用索引有关。

在次show processlist

发现多条语句状态为Writing to net

通过分析基本都是select 语句,都是查询数据太数据库返回网络回写不赢,

查看show global variables like "global max_allowed_packet"  只有1M

通过增加缓存

set global max_allowed_packet =134217728

问题得到解决!原因是多条select 返回数据越过缓存超过默认设置。

show processlist 其中status详解(适用于所有概况)的更多相关文章

  1. show engine innodb status 详解

    找个mysql客户端,执行show engine innodb status得到如下结果: 详细信息如下: ************************************** ======= ...

  2. mysql的show status详解(转载)

    SHOW STATUS提供服务器的状态信息(象mysqladmin extended-status一样).输出类似于下面的显示,尽管格式和数字可以有点不同: +-------------------- ...

  3. mysql ,show slave status详解

    ===想确认sql_thread线程是否应用完了io_thread接收到的了relay log,看 Master_Log_File=Relay_Master_Log_File , Read_Maste ...

  4. SHOW SLAVE STATUS 详解

    MySQL同步功能由3个线程(master上1个,slave上2个)来实现.执行 DE>START SLAVEDE> 语句后,slave就创建一个I/O线程.I/O线程连接到master上 ...

  5. MySQL运行状态show status详解

    状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务 ...

  6. AJAX 状态值(readyState)与状态码(status)详解

    总结:status体现的是服务器对请求的反馈,而readystate表明客户端与客户的交互状态过程. 1- AJAX状态值与状态码区别AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成 ...

  7. mysql 查看存储引擎的状态 show engine innodb status 详解

    首先,让我们来了解一下 SHOW INNODB STATUS 输出的基础,它打印了很多关于 InnoDB 内部性能相关的计数器.统计.事务处理信息等.在 MySQL 5 中,InnoDB 的性能统计结 ...

  8. MySQL show status详解

    http://www.sandzhang.com/blog/2010/04/07/mysql-show-status-explained-detail/ 要查看MySQL运行状态,要优化MySQL运行 ...

  9. svn status详解

    svn 是在提交前查看本地文本和版本库里面的文件的区别.返回值有许多种具体含义如下: [url=]  L    abc.c               # svn已经在.svn目录锁定了abc.c M ...

随机推荐

  1. 教你用netstat-实践案例

    netstat命令的功能是显示网络连接.路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作. 该命令的一般格式为: netstat [选项] 命令中各选项的含义如下: -a 显示所有so ...

  2. 开放封闭原则(OCP,Open Closed Principle)

    tks:http://www.cnblogs.com/Benjamin/p/3251987.html

  3. OC----简单的购物系统----

    今天下午OC上机考试,虽然考试的时候没写完, 但是课下写完了. main.m #import <Foundation/Foundation.h> #import "Shops.h ...

  4. 虚拟机 vlan trunk 特性

    1. 功能 1)允许不同vlan的network下的虚拟机之间通信.一般情况下,虚拟机只能在相同vlan的网络下通信. 2)允许虚拟机发送vlan报文. 2. 组网图 虚拟机出来的tap设备连接到tb ...

  5. VS2013打开项目提示此版本的应用程序不支持其项目类型(.csproj)

    命令行或者Vs自带的命令提示符输入: devenv.exe /resetskippkgs 重新打开项目即可.

  6. Yii2结合webuploader实现图片上传

    js中 uploader = WebUploader.create({ // 自动上传. auto : true, // swf文件路径 swf : 'webuploader/Uploader.swf ...

  7. BIEE 后台新建分析没有你创建的数据源

    (1)登录http://win-5rnnibkasrt:9704/analytics/saw.dll?bieehome  点击“管理” 找到“发出SQL语句”在里面写call sapurgeallca ...

  8. 【bzoj1191】 HNOI2006—超级英雄Hero

    http://www.lydsy.com/JudgeOnline/problem.php?id=1191 (题目链接) 题意 有m个问题,n个锦囊妙计,每个锦囊妙计可以解决一个问题,每个问题有两个锦囊 ...

  9. POJ2187 Beauty Contest

    Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, ea ...

  10. junit加载

    Run as junit 不会出现,把junit 包倒入lib文件夹中,在类的后面加上extends TestCase,此时上方会导入一个包:import junit.framework.TestCa ...