欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

MySQL 锁机制:共享锁、排他锁与死锁排查

时间:2026年08月12日 05:28:36 浏览:0

MySQL 锁机制:共享锁、排他锁与死锁排查


InnoDB 支持行级锁,正确理解锁机制可避免死锁和性能问题。


1. 锁类型



  • 共享锁(S)SELECT ... LOCK IN SHARE MODE,允许其他读,阻止写。

  • 排他锁(X)SELECT ... FOR UPDATE,阻止其他读写。

  • 意向锁:表级,表示事务打算在行上加锁。

  • 间隙锁(Gap Lock):锁定范围,防止幻读(RR 隔离级别下)。


2. 加锁示例


-- 共享锁
SELECT * FROM products WHERE id = 1 LOCK IN SHARE MODE;

-- 排他锁
SELECT * FROM orders WHERE order_id = 100 FOR UPDATE;

3. 死锁排查


-- 查看当前事务
SELECT * FROM information_schema.INNODB_TRX;

-- 查看锁等待
SELECT * FROM information_schema.INNODB_LOCKS;
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

-- 最近一次死锁日志
SHOW ENGINE INNODB STATUS\G

4. 死锁预防策略



  • 不同事务以相同顺序访问表。

  • 减小事务大小,缩短锁持有时间。

  • 使用 READ COMMITTED 隔离级别减少间隙锁。

  • 为表加索引,避免全表扫描导致锁表。


5. 监控锁等待超时


SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';  -- 默认 50 秒
SET GLOBAL innodb_lock_wait_timeout = 30;