- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我想在读取提交模式(在 postgres 中)执行以下事务。
T1: r(A) -> w(A)
T2: r(A) -> w(A)
如果按以下顺序调用操作:
r1(A)->r2(A)->w1(A)->c1->w2(A)->c2
我预计 T2 必须在 r(A) 处等待。因为 T1 会在第一次读取时为 A 设置独占锁,因为它想稍后写入。但是对于 MVCC 没有读锁?
现在我有两个问题:
如果我使用 JDBC 读取一些数据,然后执行一个单独的命令来插入读取的数据。数据库如何知道它在只读时必须进行独占锁定?据我所知,在 2PL 中不允许将读锁增加到写锁。
我认为我的假设是错误的……这个场景在哪里等待或者一个事务被杀死?未提交读取不应允许丢失更新,但我看不出这是如何工作的。
如果有人能帮助我,我会很高兴。谢谢
最佳答案
I would exspect that T2 has to wait at r(A). Because T1 would set an exclusive lock for A at the first read, because it wants to write it later. But with MVCC there are no read locks?
如果您在 select 语句中指定 for update
,则会有写锁。在这种情况下,如果 r2(A) 试图锁定与 r1(A) 相同的行,它将等待读取。
http://www.postgresql.org/docs/9.0/interactive/explicit-locking.html
如果两个事务开始并最终请求彼此已经锁定的行,则会发生死锁:
r11(A) -> r22(A) -> r12(A) (same as r22) vs r21(A) (same as r11) -> deadlock
关于database - 读取未提交的 mvcc 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6074242/
参考地址: 看一遍就理解:MVCC原理详解 - 掘金 (juejin.cn) 1. 相关数据库知识点回顾 1.1 什么是数据库事务,为什么要有事务
版本链 在InnoDB引擎表中,他们的聚簇索引记录中有两个隐藏列: trx_id:用来存储对数据进行修改时的事务id roll_pointer:每次对哪条聚簇索引记录有修改的时候,就
是否MVCC数据库隔离模式是否允许进行中的事务查看其他事务插入(和提交)的行? 例如,给定: 表 names[id BIGINT NOT NULL, name VARCHAR(30), PRIMARY
我试图理解 MVCC 但无法理解。例如。Transaction1 (T1) 尝试读取一些数据行。在同一时间,T2 更新同一行。 交易流程是 T1 begin -> T2 begin -> T2 com
问题是关于 MySQL InnoDB 表中同时 SELECT 和 UPDATE 的行为: 我们有一个相对较大的表,我们会定期扫描它,读取多个字段,其中包括一个名为 LastUpdate 的字段。在扫描
我对交易的理论和实现感到困惑。 根据教科书,数据项有共享锁和排他锁,这些锁是冲突的。因此,如果一个事务具有排他锁(用于插入/更新),那么即使是读取(选择/共享锁),其他事务也无法访问该数据项。 到目前
我一直在关注一些无锁代码的正确性,我真的很感激我能得到的任何输入。我的问题是关于如何在 C++11 的内存模型中使用获取和释放语义来实现一些所需的线程间同步。在我的问题之前,一些背景... 在 MVC
问候溢出者, 根据我的理解(我希望我是不对的)不能对索引进行 MVCC 更改。 我想知道这是否也适用于大记录,因为副本可能很昂贵。 由于记录是通过索引访问的(通常),MVCC 如何才能有效? 例如,索
我在网络上找到了很多资源,这些资源提供了 MVCC(多版本并发控制)概念的一般概述,但没有关于它应该如何工作或实现的详细技术引用。是否有任何在线文档或离线书籍包含足够的理论(最好是一些实际帮助)以作为
1、前言 作为一个数据库爱好者,自己动手写过简单的sql解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你
在 PostgreSQL 中,元组的每次更新都会创建新的元组版本。所以在一段时间内,同一个元组可能有很多版本,不同的交易可以看到不同版本的元组(使用可见性规则) 索引在交易完成前更新。这如何与 SI
来自 MySQL manual关于 InnoDB 多版本控制: Internally, InnoDB adds three fields to each row stored in the datab
假设我想在读取提交模式(在 postgres 中)执行以下事务。 T1: r(A) -> w(A) T2: r(A) -> w(A) 如果按以下顺序调用操作: r1(A)->r2(A)->w1(A)-
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
据我了解,postgres使用了两个额外的字段Xmin和Xmax来实现mvcc,假设我们有包含 id 和 name 列的 Employee 表。 下面是一些 crud 操作以及它们如何并发工作(考虑隔
我目前正在阅读 dbms 书籍,据我所知,Mvcc(多版本并发控制)用于高并发读写事务。 但是“搜索结构的并发控制”一章提到了 B 树的不同锁定概念(锁耦合、链接技术等)。 Mvcc 不是应用于 db
今天我想在一件可能不熟悉的事情上使用 Infinispan。我想保存一个变量,让我们在缓存中多次调用它 x - 同时能够将其寻址为 X。 普通、旧的 MVCC。然而,infinispan 似乎在后端使
问题总结 这是一个关于 SQL 事务中查询的可串行化的问题。 具体来说,我正在使用 PostgreSQL。可能假设我使用的是最新版本的 PostgreSQL。根据我的阅读,我相信用于支持我正在尝试做的
MVCC Non-Blocking Reads是InnoDB行锁的正式名称吗?我在 comparison table 中遇到过这个词汇表对于 InnoDB 和 NDB;我不确定它们是同一种东西还是完全
MongoDB 对我来说是一个很棒的数据库。但是,在某些情况下,我确实需要原子多文档事务。例如,在帐户之间转移东西(如金钱或声誉),这需要完全成功或完全失败。 我想知道是否可以通过实现多版本并发控制模
我是一名优秀的程序员,十分优秀!