我们致力于一个MySQL知识的分享网站

  |   本站Feed      

如何获悉mysql的show processlist显示的进程状态

2009-02-26 09:53:25  |   才被阅读:1,491 次  |   要评论?
分类: MySQL初级应用  |   发布: OurMySQL  |   来源:新浪开发者博客
标签: ,

当MySQL繁忙的时候运行show ,会发现有很多行输出,每行输出对应一个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也能根据端口号显示进程号,细节请参考手册。

http://www.mysqlperformanceblog.com/2007/02/08/debugging-sleeping-connections-with-mysql/

相关文章

  • 目前没有相关的文章

Leave a Reply