1. MySQL 8.0 SKIP LOCKED 的支持?
MySQL 8.0 是否支持 SKIP LOCKED?它的作用是什么?
- SKIP LOCKED 语法
- MySQL 8.0 的支持
- 用途
MySQL 8.0 支持 SKIP LOCKED 语法,用于 SELECT ... FOR UPDATE/SHARE 等当前读中。当一行被其他事务锁定时,SKIP LOCKED 会直接跳过这些被锁定的行,而不是等待。它常用于任务队列、行锁竞争下的跳过处理,让多个并发消费者各自处理不同的行,避免互相阻塞。配合 NOWAIT 可区分"跳过"与"立即报错"。SKIP LOCKED 从 MySQL 8.0 开始支持,是处理高并发行竞争的重要特性。
SKIP LOCKED 解决"锁等待"问题:与其让所有消费者排队等同一行,不如跳过被锁的行去处理其他行,提升吞吐。它尤其适合任务队列、批处理等场景。
-- 跳过其他事务已锁定的行,取可立即处理的行
SELECT * FROM task_queue
WHERE status = 'pending'
ORDER BY id
LIMIT 10
FOR UPDATE SKIP LOCKED;