“Mysql show processlist”的版本间的差异
跳到导航
跳到搜索
(→参考) |
|||
(未显示同一用户的1个中间版本) | |||
第25行: | 第25行: | ||
可知进程18783发起的MySQL连接来源端口是35558,然后就可以用strace观察这个进程了。如果是Apache的PHP脚本,还可以 用proctitle模块( http://pecl.php.net/package/proctitle/ )设置脚本的状态信息。 | 可知进程18783发起的MySQL连接来源端口是35558,然后就可以用strace观察这个进程了。如果是Apache的PHP脚本,还可以 用proctitle模块( http://pecl.php.net/package/proctitle/ )设置脚本的状态信息。 | ||
− | lsof也能根据端口号显示进程号,细节请参考手册。</pre> | + | lsof也能根据端口号显示进程号,细节请参考手册。 |
+ | |||
+ | |||
+ | |||
+ | 取消会话或查询 | ||
+ | |||
+ | 您可使用 rds_kill 和 rds_kill_query 命令终止数据库实例上的用户会话或查询。首先连接到 MySQL 数据库实例,然后发出正确的命令,如下所示。有关更多信息,请参阅 与运行 MySQL 数据库引擎的数据库实例连接。 | ||
+ | |||
+ | CALL mysql.rds_kill(thread-ID) | ||
+ | CALL mysql.rds_kill_query(thread-ID) | ||
+ | |||
+ | 例如,要取消线程 99 上运行的会话,可以键入以下内容: | ||
+ | |||
+ | CALL mysql.rds_kill(99); | ||
+ | |||
+ | 要取消线程 99 上运行的查询,可以键入以下内容: | ||
+ | |||
+ | CALL mysql.rds_kill_query(99); | ||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
==参考== | ==参考== | ||
第35行: | 第56行: | ||
http://www.51testing.com/html/96/110296-69546.html | http://www.51testing.com/html/96/110296-69546.html | ||
https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html | https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html | ||
+ | [https://www.cnblogs.com/wxzhe/p/10239852.html show processlist命令与kill 线程] | ||
+ | [https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#Appendix.MySQL.CommonDBATasks.Kill MySQL 数据库实例的数据库管理员常见任] | ||
[[category:mysql]] | [[category:mysql]] |
2020年3月25日 (三) 08:16的最新版本
show processlist
先简单说一下各列的含义和用途,第一列, 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也能根据端口号显示进程号,细节请参考手册。 取消会话或查询 您可使用 rds_kill 和 rds_kill_query 命令终止数据库实例上的用户会话或查询。首先连接到 MySQL 数据库实例,然后发出正确的命令,如下所示。有关更多信息,请参阅 与运行 MySQL 数据库引擎的数据库实例连接。 CALL mysql.rds_kill(thread-ID) CALL mysql.rds_kill_query(thread-ID) 例如,要取消线程 99 上运行的会话,可以键入以下内容: CALL mysql.rds_kill(99); 要取消线程 99 上运行的查询,可以键入以下内容: CALL mysql.rds_kill_query(99);
参考
MySql使用show processlist查看正在执行的Sql语句
http://www.cnblogs.com/jasondan/p/3491258.html http://www.51testing.com/html/96/110296-69546.html https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html show processlist命令与kill 线程