在命令行窗口执行 show processlist,一般会得到类似如下结果
Id | User | Host | db | Command | Time | State | Info |
---|---|---|---|---|---|---|---|
2 | root | localhost:52899 | dev | Sleep | 20 | ||
3 | root | localhost:52906 | dev | Query | 0 | starting | show processlist |
使用show processlist可以查看连接的线程个数,来观察是否有大量线程处于不正常的状态或者其他不正常的特征。
show processlist 是显示用户正在运行的线程,需要注意的是,除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。
默认情况下,show processlist 命令只列出前100条,如果想全列出请使用show full processlist。
了解了以上信息后,我们来解释下,查询结果各列的意思:
id表示session id
user表示操作的用户
host表示操作的主机
db表示操作的数据库
command表示当前状态
info表示详细的sql语句
time表示相应命令执行时间
state表示命令执行状态
其中 command 常见的状态有以下几种:
sleep:线程正在等待客户端发送新的请求
query:线程正在执行查询或正在将结果发送给客户端
locked:在mysql的服务层,该线程正在等待表锁
analyzing and statistics:线程正在收集存储引擎的统计信息,并生成查询的执行计划
Copying to tmp table:线程正在执行查询,并且将其结果集都复制到一个临时表中
sorting result:线程正在对结果集进行排序
sending data:线程可能在多个状态之间传送数据,或者在生成结果集或者向客户端返回数据
不过就现在来讲,这个命令其实还是很少用到的,因为现在开发基本都有数据库连接池来管理连接数据库了。