mysql show processlist,kill pid,查看连接数 查看被锁的表

本文介绍MySQL中如何使用showprocesslist查看当前线程及执行的SQL,利用showopentables定位被打开的表,以及如何通过kill命令终止特定线程。

show processlist

show [full] processlist;
展示属于当前用户的线程,如果当前用户有 process privilege,那么会展示所有线程。
如果不加full,只显示前100条;show processlist展示的线程不包含background thread,所以线程数就等于connections

  • id,connection的id
  • user,发送sql的mysql 账号
  • host,发送sql的客户端,一般是ip:port格式
  • db,sql连接的数据库
  • command,connection正在执行的命令类型,常见的有Sleep,表示connection空闲;query,正在查询数据。
  • time,线程已经执行的时间,单位是秒。如果是replica SQL thread,那么就是最后一次replicated event 和replica host的差值。
  • State,一个事件、一个动作、一个状态,表示线程正在做的事情,通常一个状态对应着很快的操作,如果一个状态持续了很长时间,通常有问题,需要研究一下了。
  • Info,线程正在执行的sql,通常是客户端发过来的sql,也可能是客户端发过来sql引起的sql,比如客户端发送调用存储过程,那么这里展示存储过程的sql。

还可使用show status like '%threads_%';threads_connected就是当前线程数,也是连接数,与show processlist的记录数相同。
在这里插入图片描述

查看被打开的表

show open tables where in_use>0;

这里有个疑问,这个sql查出来的表,不一定是被锁住的。因为用查询,如果耗费时间很长,也会查询出来。
这里的open tables是什么意思? 每次操作(查询、更新、增加、删除)都会打开表,一个线程一个connection
为了维护不同的状态,他们分别打开表,这就是open tables,所以说open tables说明在操作表,如果表锁了,这个sql是正确的。

可以使用 show status like '%Opened_tables%';查看已经打开的表

活学活用show status和show variables,一个是查看mysql当前状态,一个是查看环境变量;

杀死链接

KILL [CONNECTION | QUERY] processlist_id
不加modifier等同于kill connection
kill query pid,是杀死connection中的sql,不杀死connection

总结

先通过show processlist查看执行时间最长的线程,找到对应sql,找到表;
然后再使用show open tables where in_use>0 验证一下;
确认后,使用kill process_id 杀死connection

参考

http://dev.mysql.com/doc/refman/5.7/en/show-processlist.html

<think>好的,我现在需要帮助用户了解MySQL的进程管理、监控、优化和排查问题。用户可能遇到了性能问题,比如CPU使用率高,或者连接数过多,需要知道如何监控和解决这些问题。 首先,我应该整理MySQL进程管理的基本概念,包括如何查看进程列,使用哪些命令,比如SHOW PROCESSLIST和系统工具如ps、pidstat。这部分需要结合用户提供的引用,比如引用[3]提到使用show full processlist查看Command和Time,找出Sleep线程,然后调整wait_timeout参数。 接下来是监控部分。用户需要知道如何实时监控进程状态,可以使用MySQL自带的命令,或者外部工具如pidstat。引用[1]提到了pidstat和ps命令来监控CPU使用情况,引用[4]提到慢查询日志和pt-query-digest工具分析慢查询。这部分需要详细说明如何配置和使用这些工具。 然后是优化策略。引用[2]提到innodb_log_files_in_group参数设置日志文件数量以提高性能,引用[3]和[4]提到了调整等待时间和优化查询。需要把这些点整合起来,包括连接池优化、参数调整和索引优化。 排查部分需要列出常见问题及解决方法,比如CPU高、连接数过多、争用。引用[3]中提到的Sleep线程导致CPU高,需要调整wait_timeout,或者kill空闲连接。引用[4]中的慢查询优化,引用[5]中的连接池监控工具。这里需要分步骤说明每个问题的排查方法,结合用户提供的引用内容。 最后生成相关问题,要覆盖用户可能进一步询问的方向,比如具体监控工具、连接数优化、问题处理等,确保问题有针对性,帮助用户深入理解。 需要确保回答结构清晰,分步骤讲解,每个部分都有对应的解决方案和命令示例。同时,正确引用用户提供的引用资料,比如在调整参数时引用[2]和[3],在监控CPU时引用[1]和[3],分析慢查询时引用[4]等。还要注意使用中文,数学公式用$...$,独立公式用$$...$$,但根据用户的问题,可能数学公式较少,但如果有涉及性能指标的计算,可能需要用LaTeX格式。 检查是否有遗漏的引用内容,比如引用[5]提到的连接池监控工具,需要在优化或排查部分提及。确保每个引用在回答中都有对应的引用标识,如[^1]、[^2]等。 总结下来,回答的结构应该是: 1. 进程管理:查看进程的命令和工具 2. 监控方法:实时监控、日志分析、外部工具 3. 优化策略:参数调整、查询优化、索引优化 4. 问题排查:常见问题及解决步骤 5. 相关问题:生成相关问题供用户进一步学习 现在需要将这些内容用清晰的中文达,正确引用,并确保LaTeX格式正确,虽然当前问题可能较少涉及数学公式,但如果有性能相关的公式需要展示,要用正确的格式。</think>### MySQL进程管理、监控、优化与排查指南 --- #### 一、进程管理 1. **查看活动进程** - 使用MySQL内置命令: ```sql SHOW FULL PROCESSLIST; -- 查看所有连接的详细信息,包括当前执行的SQL语句[^3] ``` - 系统级命令: ```bash ps -efL | grep mysql # 查看MySQL线程及其资源占用[^1] pidstat -u -p <mysql_pid> -t 1 10 # 监控指定进程的CPU使用情况 ``` 2. **分析进程状态** - 关注`Command`列(如`Sleep`示空闲连接)和`Time`列(空闲时长)。 - 通过`State`字段判断线程状态(如`Sending data`示正在查询)。 --- #### 二、监控方法 1. **实时监控** - **CPU/内存监控**: ```bash top -H -p <mysql_pid> # 查看MySQL线程的CPU和内存使用 ``` - **监控**: ```sql SHOW ENGINE INNODB STATUS; -- 查看InnoDB信息 ``` 2. **日志分析** - **慢查询日志**: 启用并分析慢查询日志,优化耗时SQL: ```sql SET GLOBAL slow_query_log = ON; -- 使用pt-query-digest分析日志[^4] ``` - **错误日志**: 定期检查`/var/log/mysql/error.log`,定位启动失败或崩溃原因。 --- #### 三、优化策略 1. **参数调优** - 调整`wait_timeout`减少空闲连接: ```sql SET GLOBAL wait_timeout = 60; -- 热修改空闲等待时间 ``` - 优化InnoDB日志配置: ```ini innodb_log_files_in_group = 3 -- 增加日志文件提升写入性能[^2] ``` 2. **查询优化** - 为高频查询字段添加索引: ```sql ALTER TABLE users ADD INDEX idx_email (email); ``` - 避免全扫描,使用`EXPLAIN`分析执行计划。 3. **连接池管理** - 使用连接池工具(如HikariCP)复用连接,减少频繁创建开销[^5]。 --- #### 四、问题排查流程 1. **CPU使用率高** - 步骤: 1. `pidstat`定位高CPU线程 → 2. 根据线程ID反查SQL → 3. 优化对应查询或索引。 2. **连接数过多** - 现象:`Too many connections`错误。 - 解决: - 增大`max_connections`参数。 - 清理空闲连接:`KILL <process_id>`。 3. **争用** - 使用`SHOW ENGINE INNODB STATUS`查看等待链,优化事务粒度或索引。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值