我在 MySQL 5 (InnoDB) 中有一个表,用作守护进程处理队列,因此它经常被访问。通常每天插入大约 250 000 条记录。当我选择要处理的记录时,使用 FOR UPDATE 查询读取它们以消除竞争条件(一切都是基于事务的)。
现在我正在开发一个“队列存档”,我偶然发现了一个严重的死锁问题。我需要在处理(实时)表时从表中删除“已执行”记录,但是如果我这样做(每天两到三次),表每隔一段时间就会死锁一次。
我虽然倾向于延迟删除(在低负载时间每天一次),但这并不能消除问题,只会让它变得不那么明显。
在 MySQL 中处理高负载表是否有通用做法?