在开发的过程中,我们经常需要查看一下当前数据库的执行情况,比如如果我们select一个数据,很长时间都没有返回,我们在想,是不是什么sql语句把表锁着了,或者什么sql把资源占完了,那么我们怎么查这条sql呢?
办法肯定是有的:
mysql> show full processlist;
我们详细介绍一下每个属性是什么意思吧
id
很容易就猜到是这个连接的id,值对应这个连接使用的线程id。
User
用户名
Host
连接的地址和端口,那么你可能会问,为什么我贴的例子的地址都是同一个host呢,很明显是用了代理,感兴趣的可以看看这篇文章http://www.phpv.net/html/1583.html,这里就不详细解释了。
db
此连接所连接使用的数据库名。
command
一般有俩值:sleep
和query
,从字面意思就可以看出,一个是处理睡眠状态,就是处于连接状态,但是没有正在执行任何sql语句,Query代表正在执行sql语句。
Time
连接的时间。
State
我个人觉得应该是当前线程的状态吧。
info
代表正在执行的sql,如果command为sleep时,它为空。
那如果我们遇到一个sql要执行很长时间,但是我们又不想让它继续执行了,怎么办呢?既然每个连接是在一个线程里维护,这个线程是否可以删除呢?我们尝试一下:
mysql> show full processlist;
+-------+----------+----------------------+---------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+----------+----------------------+---------+---------+------+-------+-----------------------+
| 25 | tuan_sql | 192.168.100.39:60161 | tao800 | Sleep | 2 | | NULL |
| 12196 | tuan_sql | 192.168.100.39:34410 | tao800 | Sleep | 43 | | NULL |
| 13067 | tuan_sql | 192.168.100.39:40964 | tao800 | Sleep | 77 | | NULL |
| 15690 | tuan_sql | 192.168.100.39:33791 | tao800 | Query | 0 | NULL | show full processlist |
| 15813 | tuan_sql | 192.168.100.39:35257 | zhe_oem | Sleep | 239 | | NULL |
| 15814 | tuan_sql | 192.168.100.39:35258 | zhe_oem | Sleep | 239 | | NULL |
+-------+----------+----------------------+---------+---------+------+-------+-----------------------+
16 rows in set (0.00 sec)
我们杀掉15814这个线程:
mysql> kill 15814;
Query OK, 0 rows affected (0.00 sec)
————————————————
版权声明:本文为CSDN博主「weixin_39594312」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39594312/article/details/113633925