代码之家  ›  专栏  ›  技术社区  ›  Kruspe

具有悲观写锁的可重复读隔离级别

  •  1
  • Kruspe  · 技术社区  · 6 年前

    现在,我正在阻止来自多个实例的多个用户使用 悲观的写入 锁锁定行的事务设置了默认隔离级别,即 可重复读取

    在表为空的情况下,它会被新的条目重新填充,而在这里它会变得很奇怪。插入是在单独事务中运行的异步批量插入。因此,当提交此数据时,用户将读取一行以进行更新,这将锁定该行。不知何故,这不再有效,多个用户可以从同一行获取值。

    在尝试解决这个问题时,我将隔离级别更改为 已提交READ\u 这个问题不再发生了。

    有人能告诉我这是怎么可能的吗?我错过了什么?

    以下是一些psyeudo代码,以便于更好地理解:

    异步重新填充

    Transaction
    get values to insert
    bulk insert
    

    获取值

    Transaction
    read a row for update (Locks it)
    do stuff
    delete the row
    

    对于锁定,我们使用来自弹簧数据的注释: @Lock(LockModeType.PESSIMISTIC_WRITE)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Kruspe    6 年前

    答案是,极光优先于极光2。x使用的是MySQL 5.6.10。极光2。x现在使用的是MySQL 5.7.12,问题是一个bug,现已修复。

    P、 我仍然在问自己为什么aurora使用了一个2年前的MySQL版本,但那是另一回事。