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