将哲学家进餐问题应用于 innodb,以及使用 select 进行更新:
1) 具有 100,000 个分叉的表,由具有单个主键(分叉)的 innodb 表表示
2) 分叉的抓取是一个更新选择,它指定了该表中 2 到 20 个主键的一些随机列表,而“抓取”正是这个随机分叉列表上相对于 100,000 个不同主键的更新选择. 顺便说一下,select 语句中键列表的顺序是随机的。
3) 有超过 5 个思考者,比如说多达 50 个“同时”的交易抓住了相交的分叉
4)思考时间是在步骤2中为主键的行更新其他列。思考时间永远不会太长。
问题:对于innodb,在上述情况下是否可能由于不公平而导致死锁或饥饿?有什么需要注意的吗?(隔离级别读取已提交。)
目的:使用该表和锁定行的主键来表示复杂更新场景的依赖关系,以便在对各种相关表(顺序一致的表)和其中的行进行一系列更新之前,确定一组依赖关系等同于步骤 1 的主键集,然后在事务开始时使用 select for update 锁定这些依赖项。(当然,在选择更新之后,我重新查询依赖项以确保它们没有改变。)