MySQL运维常用SQL

最近因排查MySQL中一个SQL查询缓慢问题,用到了一些排查问题的SQL,在这里进行下总结及延申

一、查看所有数据库连接线程状态

sql 复制代码
SHOW PROCESSLIST;

关键列解析:

Command类型:

常用相关查询

sql 复制代码
-- 查找慢查询(按执行时间倒序排序)
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE COMMAND = 'Query' 
ORDER BY TIME DESC;

-- 清理空闲连接(查找空闲超过10分钟的连接)
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE COMMAND = 'Sleep' AND TIME > 600;

-- 找出被阻塞的事务
SELECT * 
FROM INFORMATION_SCHEMA.INNODB_TRX trx
JOIN INFORMATION_SCHEMA.PROCESSLIST pl 
  ON trx.trx_mysql_thread_id = pl.ID
WHERE trx.trx_state = 'LOCK WAIT';

二、查询正在执行的事务

sql 复制代码
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX ORDER BY trx_started DESC;

列解析:

三、查看当前死锁信息

复制代码
SHOW ENGINE INNODB STATUS

核心部分深度解析

1. BACKGROUND THREAD

显示 InnoDB 主线程状态:

text 复制代码
srv_master_thread loops: 1000 srv_active, 10 srv_shutdown, 100 srv_idle
srv_master_thread log flush and writes: 1100
  • srv_active:活动循环次数
  • srv_idle:空闲循环次数
  • log flush:日志刷新次数

2. SEMAPHORES (信号量/锁等待)

text 复制代码
OS WAIT ARRAY INFO: reservation count 100, signal count 99
Mutex spin waits 200, rounds 3000, OS waits 50
RW-shared spins 150, OS waits 30; RW-excl spins 80, OS waits 20

关键指标:

  • OS waits:操作系统级等待次数(值高表示严重锁竞争)
  • spin waits:自旋锁等待次数
  • 高值警告:OS waits > 0.5% of spin waits 需优化

3. TRANSACTIONS (事务状态)

最重要的诊断部分:

text 复制代码
---TRANSACTION 123456789, ACTIVE 10 sec
2 lock struct(s), heap size 360, 1 row lock(s), undo log entries 1
MySQL thread id 42, OS thread handle 0x7f8d12345678, query id 999 localhost root
UPDATE users SET status=1 WHERE id=100
------- TRX HAS BEEN WAITING 5 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 333 page no 3 n bits 72 index `PRIMARY` of table `test`.`users`
 trx id 123456789 lock_mode X waiting

关键信息:

  • 事务ID和持续时间
  • 持有/等待的锁(lock_mode X 表示排他锁)
  • 阻塞的SQL语句
  • 线程关联信息

4. LATEST DETECTED DEADLOCK (最新死锁)

text 复制代码
*** (1) TRANSACTION:
TRANSACTION 111111, ACTIVE 5 sec starting index read
mysql tables in use 1, locked 1
UPDATE t1 SET col=1 WHERE id=10

*** (1) HOLDS THE LOCK(S):
RECORD LOCKS space id 100 page no 5 ...

*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 200 page no 8 ...

*** (2) TRANSACTION:
TRANSACTION 222222, ACTIVE 3 sec starting index read
UPDATE t2 SET col=1 WHERE id=20

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 200 page no 8 ...

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 100 page no 5 ...

死锁分析要素:

  • 冲突的事务和SQL语句
  • 各自持有的锁
  • 相互等待的资源
  • 最终牺牲的事务(WE ROLL BACK TRANSACTION (2))

5. FILE I/O (I/O 线程)

text 复制代码
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: doing file i/o (read thread)
Pending normal aio reads: 0, aio writes: 0
 ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0

监控点:

  • I/O线程状态(waiting/doing i/o)
  • 挂起的异步I/O操作数量

6. BUFFER POOL AND MEMORY (缓冲池)

text 复制代码
Buffer pool size   32768
Free buffers       1024
Database pages     30000
Modified db pages  500  # 脏页数量
Reads 100000, creates 2000, writes 3000
Buffer pool hit rate 999 / 1000  # 命中率99.9%

关键指标:

  • Modified db pages:需刷盘的脏页(突然增加可能致性能下降)
  • Hit rate:缓冲池命中率(应 > 95%)
  • Reads:磁盘读取次数(高则需扩大缓冲池)

7. ROW OPERATIONS (行操作)

text 复制代码
Main thread process no. 1000, id 888888, state: sleeping
Number of rows inserted 10000, updated 5000, deleted 200, read 999999
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 10.00 reads/s

性能监控:

  • 主线程状态
  • 行操作统计(绝对值+每秒速率)
  • 突然的速率变化可能预示问题
相关推荐
code-vibe21 小时前
物理机 kali 改造笔记 (一)
linux·运维·服务器
苦学编程的谢21 小时前
Redis_4_常见命令(完)+认识数据类型和编码方式
数据库·redis·缓存
小坏讲微服务21 小时前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
小光学长21 小时前
基于Vue的儿童手工创意店管理系统as8celp7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
老黄编程21 小时前
03-gpg(证书管理 )详细范例
linux·运维·ubuntu·数字证书
小光学长21 小时前
基于Vue的地铁综合服务管理系统7949eg04(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
Yeats_Liao21 小时前
时序数据库系列(二):InfluxDB安装配置从零搭建
数据库·后端·时序数据库
Yeats_Liao21 小时前
时序数据库系列(一):InfluxDB入门指南核心概念详解
数据库·后端·时序数据库·db
Aimyon_361 天前
MinerU Docker自定义版本部署
运维·docker·容器
莱茶荼菜1 天前
Ubuntu 20.04 系统库管理详细教程
linux·运维·ubuntu