`

事物隔离层简介

 
阅读更多

隔離性是交易的保證之一,表示交易與交易之間不互相干擾,好像同時間就只有自己的交易存在一樣,隔離性保證的基本方式是在資料庫層面,對資料庫或相關欄位鎖定,在同一時間內只允許一個交易進行更新或讀取。

先來看看沒有對資料庫進行鎖定下,可能發生的問題:

  • 更新遺失(lost update)
基本上就是指某個交易對欄位進行更新的資訊,因另一個交易的介入而遺失。

例如,兩個以上交易在進行同一欄位的更新時,若沒有對欄位進行鎖定,若交易A進行COMMIT,交易B因故ROLLBACK,則交易A所作的更新就會發生遺失的問題:
  1. 交易A更新欄位1
  2. 交易B更新欄位1
  3. 交易A COMMIT
  4. 交易B ROLLBACK
另一種可能的情況是,如果交易A在交易B前後進行更新與COMMIT,則交易B所作的更新將會遺失,又稱為二次更新遺失(second lost update),例如:
  1. 交易A更新欄位1
  2. 交易B更新欄位1
  3. 交易B COMMIT
  4. 交易A COMMIT
在以上的情況,交易B所進行的更新將會遺失。


  • 髒讀(dirty read)
兩個交易同時進行,其中一個交易更新資料,另一個交易讀取了尚未COMMIT的資料,就有可能發生髒讀問題。例如:
  1. 交易A更新欄位1
  2. 交易B讀取欄位1
  3. 交易A ROLLBACK
  4. 交易B COMMIT
在以上的情況下,交易B讀取的是不正確的資料。


  • 無法重複的讀取(unrepeatable read)
某個交易兩次讀取同一欄位的資料並不一致,例如,如果交易A在交易B前後進行資料的讀取,則會得到不同的結果。
  1. 交易A讀取欄位1
  2. 交易B更新欄位1
  3. 交易B COMMIT
  4. 交易A讀取欄位1
在以上的情況,交易A讀取兩次欄位1,但卻得到不同的結果。


  • 幻讀(phantom read)
如果交易A進行兩次查詢,在兩次查詢之中有個交易B插入一筆新資料或刪除一筆新資料,第二次查詢時得到的資料多了第一次查詢時所沒有的筆數,或者少了一筆。
  1. 交易A進行查詢得到五筆資料
  2. 交易B插入一筆資料
  3. 交易B COMMIT
  4. 交易A進行查詢得到六筆資料


隔離交易的基本方式是鎖定資料庫,但完全的鎖定資料庫實務上並不會這麼作,因為完全的鎖定資料庫將導致嚴重的效能問題,因此實務上會根據資料讀寫更新的頻繁性,設定不同的交易隔離層級(transaction isolation level):

  • read uncommited
簡而言之,某個交易可以讀取另一個交易已更新但尚未commit的資料,所以允許dirty read,但不允許lost update,也就是允許交易B讀取交易A更新尚未COMMIT的資料,但在交易A進行COMMIT前,不允許其它交易再寫入(也就是寫入鎖定)。

這個隔離層級讀取錯誤資料的機率太高,一般不會採用這種隔離層級。

讀取的交易不會阻止其它的交易,一個未COMMIT的交易會阻止其它寫入的交易。
  • read commited
比read uncommited嚴格一些,簡而言之,某個交易僅可讀取另一個交易已commit的資料,所以允許unrepeatable read,但不允許dirty read,一筆交易正在讀取資料時,允許另一筆交易進行資料寫入,但不允許已經dirty的資料被讀取或寫入(shared read lock, exclusive write lock)。

讀取的交易不會阻止其它的交易,一個未COMMIT的交易會阻止其它所有的交易。
  • repeatable read
比read commited嚴格,在一個交易己讀取的資料,不允許其它交易進行資料寫入,不允許unrepeated read,但phantom read還是可能發生。

讀取的交易不會阻止其它讀取的交易,但會阻止其它寫入的交易,而寫入的交易會阻止所有其它的交易。
  • serializable
最嚴格的隔離層級,同一筆資料一次只能有一個交易,無法讓交易並行處理。


read uncommited出錯的機率太大,大部份的應用程式會選用read commited或repeatable read的隔離層級,而serializable執行完全的鎖定,嚴重傷害系統效能。

真正的鎖定系統是在資料庫系統上實作的,依各家廠商而有所不同,必須參考廠商的說明書,了解不同的隔離層級對應用程式的效能與擴展性有何影響。

以下整理隔離層級對多個交易並行處理的影響,YES表示會發生問題:

隔離層級 Dirty Read Unrepeatable Read Phantom Read
Read uncommitted YES YES YES
Read committed NO YES YES
Repreatable read NO NO YES
Serializable NO NO NO
分享到:
评论

相关推荐

    MyBatis 事务管理解析:颠覆你⼼中对事务的理解.pdf

    1.说到数据库事务,⼈们脑海⾥⾃然不⾃然的就会浮现出事务的四⼤特性、四⼤隔离级别、七⼤传播特性。 四⼤还好说,问题是七⼤传播特性是哪⼉来的?是Spring在当前线程内,处理多个数据库操作⽅法事务时所做的⼀种...

    MySQL数据库在idea中的增删改查,JDBC简化,JDBC工具类封装,orm模式,数据库三层架构,JDBC事务

    本项目为一个简单的JDBC项目,包括:MySQL数据库在...然后还在封装的JDBCUtils工具类中增加的jJDBC事务,可以进行数据的手动提交与回滚,以求达到sql语句的原子性,一致性,隔离性,以及持久性,不轻易的修改数据库。

    InnoDB引擎的事务与锁

    隔离性:事务不可见行,事务与事务之间分离不可见。持久性:事务一旦提交,其结果就是永久性的,即使发生宕机,数据也是可以恢复的。 1.扁平事务 扁平事务是事务中最简单的一种,也是使用最频繁的,在扁平事务中,...

    C#分布式事务的超时处理实例分析

    事务是个很精妙的存在,我们在数据层、服务层、业务逻辑层等多处地方都会使用到。 在这里我只说下TransactionScope这个微软推荐使用的隐式事务。它是从Framework 2.0开始引入的一个事务管理类,在使用隐式事务时,...

    jungle-db:适用于NodeJS(LMDB和LevelDB)和浏览器(IndexedDB)的简单数据库抽象层,支持高级功能,例如具有读取隔离和辅助索引的事务

    丛林数据库 JungleDB是NodeJS(LMDB或LevelDB)和浏览器(IndexedDB)的简单数据库抽象层,支持高级功能,例如具有读取隔离和辅助索引的事务。快速开始使用jungle-db的最简单选择是从npm存储库中安装它。 npm ...

    ADO.NET考核知识点

    事务的并发性错误和事务隔离级别;面向对象三层架构设计;MVC模型(模型Model-视图View-控制器Controller);三层架构与MVC的区别;LINQ;LINQ to ADO.NET;数据定义语言;SQL Server错误号为4060表示何总错误。;连接池...

    reSTM:RESTful软件事务性内存

    数据通过软件事务存储API进行管理,该API使用多版本并发控制(MVCC)存储指针值,并且事务隔离由单个指针的读/写锁定系统强制实施。 内存指针值和数据事务的状态存储为有状态参与者的系统。 存储平台顶部的其他软件...

    Hibernate缓存管理

    当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定四种类型的并发访问策略,每一种策略...

    MYSQL基础知识——逻辑结构、并发控制、事务、多版本控制和存储引擎

    本篇文章会简单对MYSQL的逻辑结构、并发控制、事务、多版本控制和存储引擎等知识点进行梳理。 1 MYSQL逻辑结构  MYSQL逻辑结构如图所示,最上层服务主要包括连接管理、授权认证等;第二层服务是整个MYSQL的核心层...

    Java面试系列-MySQL

    能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索、...已提交读隔离级别下的事务在每次查询的开始都会生成一个独立的ReadView,而可重复读隔离级别则在第一次读的时候生成一个ReadV

    mysql面试必会必考题

    Q7:MySQL 的隔离级别有哪些? Q8:MVCC 是什么? Q9:谈一谈 InnoDB Q10:谈一谈 MyISAM Q11:谈一谈 Memory Q12:查询执行流程是什么? Q1:MySQL 的逻辑架构了解吗? 第一层是服务器层,主要提供连接处理、授权...

    Key-Value存储引擎ForestDB.zip

    ForestDB 是一个快速的 Key-Value 存储引擎,基于层次B 树单词查找树。...可针对每个 ForestDB 数据库文件配置手工和自动的压缩支持 read_committed 或者 read_uncommitted 事务隔离级别 标签:ForestDB

    [详细完整版]数据库填空题.doc

    在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样,这是 指事务的_隔离_性。 24.在SQL/CLI中,保存元组或参数的有关信息的是__描述记录__。 25.在面向对象技术中,对象联系图是描述面向对象_...

    J2EE指南(官方).pdf

    隔离级别 七.更新多个数据库 八.Web 组件事务 第15章 安全 一.纵览 二.安全角色 三.Web层安全 四.EJB层安全 五.应用程序客户端层安全 六.EIS(Enterprise Information System)层安全 七.传递安全身份 八....

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    4.3 事务隔离、传播属性的设置 198 4.3.1 并发访问和隔离 198 4.3.2 事务属性 199 4.4 EJB的事务管理 201 4.4.1 容器管理事务(CMT) 201 4.4.2 Bean管理事务(BMT) 201 4.5 事务超时设置 201 4.6 本章小结 203 第5章 ...

    EShop-SOA:EShop基于Dubbo实现SOA服务化分解,并基于RocketMQ解决了分布式事务(新版SpringBootSOASkeleton)

    Dubbo + TCC分布式事务 业务细分 用户类别: 用户模块:用户+邮件,涉及用户,角色,邮件,邮件文本,余额表 产品模块:产品,涉及产品,类别表 新闻模块:新闻,涉及新闻表 订单清单:order,涉及order表 邮件样本 ...

    Spring.html

    requerd:必须的(默认),如果A有事务那么就加入A的事务,如果A没有事务那么单独创建一个事务 supports,如果A有事务则加入,如果没有就算了 隔离级别 default:使用数据库默认的隔离级别(mysql:可重复读,oracle:读...

    J2EE使用指南

    隔离级别 212 七.更新多个数据库 212 八.Web 组件事务 214 第15章 安全 215 一.纵览 215 二.安全角色 216 三.Web层安全 217 四.EJB层安全 219 五.应用程序客户端层安全 220 六.EIS(Enterprise Information ...

    【《数据库与信息系统》复习题及答案】第5章数据库管理与保护.pdf

    事务具有原⼦性 (Atomic) 、 ⼀致性 (Consistency) 、 隔离性 (Isolation) 和持久性(Durabiliy)四个特性,简称 ACID。 4.设有两个事务 T1、T2,其并发操作如图 5.1 所示,下列评价正确的是________。 A....

Global site tag (gtag.js) - Google Analytics