【问题标题】:Repeatable read implementation in MySql server side?MySql 服务器端的可重复读取实现?
【发布时间】:2015-06-30 10:45:57
【问题描述】:

我了解可重复读取事务隔离级别的含义。

在可重复读取事务期间,任何事务在我的事务开始后提交的数据都不会被我的事务看到。

但是我很难理解它是如何在 sql server 端实际实现的。是不是在每个事务开始时都会为该特定事务拍摄数据库快照并留出空间?

如果是这样,那么如果在任何时间点启动多个可重复读取事务,那么内存资源量会很大吗?

也有人可以阐明共享/独占锁在可重复读取中的作用 ?

【问题讨论】:

  • MySQL是开源的,大家可以查一下。
  • 在可重复读取的情况下,它表示它不会释放共享锁,直到事务结束。什么是共享锁?假设表中有 10 行。每一行都有共享锁吗?如果锁被占用了,在这个事务完成之前,任何其他事务怎么可能提交?

标签: mysql


【解决方案1】:

我在一段时间内寻求相同的答案,经过一些搜索工作,我认为它基本上是通过使用MVCC(Snapshot Read) + GAP LOCK + NEXT KEY LOCK实现的。

我不太确定我是否理解正确,但我认为某些关键字可能有助于进一步的搜索工作。

顺便说一句,如果有人对中文很了解,这里有一些很好的中文解释:

http://hedengcheng.com/?p=771
https://www.cnblogs.com/kismetv/p/10331633.html

【讨论】:

    猜你喜欢
    • 2015-09-18
    • 2015-09-06
    • 2018-12-06
    • 2018-05-19
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2017-06-14
    相关资源
    最近更新 更多