Skip to content

目前写事务逻辑可能出现索引插入重复,不一致的情况 #1

Description

@Kosthi

考虑以下情景:

两个new order事务A、B持有相同d_id,w_id,no_id(同时执行了select next_o_id from district)

  1. 事务A先执行成功,然后事务B再插入则会发生索引键重复,返回failure,如果脚本不做处理,只有abort会重做,会执行事务B成功;
  2. 事务A先执行成功,然后发生delivery事务正好删除了这个new_order(d_id,w_id,no_id),此时事务B再执行,插入orders、order_line表会发生索引键重复无法插入,插入new_orders表正常插入,没有出现abort,则执行成功。

对前三种一致性检验规则无影响,因为1、2情况执行了2个new_order事务,ordes表插入了一次,一致性不通过。

这种情况要保证随机生成的2个d_id和w_id都一样,在小w才有可能比较大的概率。

官方脚本貌似是每个no_id都是递增生成的,所以不存在同一时刻两个new order事务持有相同键,从而不存在索引重复的情况。

如果不这么处理应该发生索引重复也得回滚,重做事务再查district就是新的值了。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions