`

[#0x0034] Isolation

SQL 
阅读更多

  参考Wikipedia: http://en.wikipedia.org/wiki/Isolation_(database_systems)#Repeatable_reads_.28phantom_reads.29  

 

  Isolation的理想状态是:the result of Transaction A is invisible to Transaction B until Transaction A is completed。不过这么一来,只有Serializable级别才能满足要求,即Transactions是一个接一个地执行,不允许Transactions的并行。如果想要Transactions的并行,那么就不可能有绝对的isolation。为此,ANSI/ISO制定的SQL标准给Isolation分了4个级别,由高到低分别是:

  • Serializable
  • Repeatable Read (Phantom Read)
  • Read Committed (Nonrepeatable Read)
  • Read Uncommitted (Dirty Read)

级别越高的,isolation性越好,而低级别的isolation会有各种各样的并发问题(如上面括号中所示)。下面一一介绍。

 

1. Read Uncommitted

  Transaction 1可以查看Transaction 2未提交的操作结果,这会导致Dirty Read的问题,如下图所示:

 

dirty read

Transaction 1的执行的第二个query会读到Transaction 2中update的结果,如果Transaction 2 rollback的话,这个读到的数据明显是错误的。

 

2. Read Committed

  如果我们强制Transaction 1只能读Transaction 2中已经commit的update,就可以解决Dirty Read的问题。强制的手段是:每次query(比如SELECT)时,都会获取当前数据库(或者可能只是query涉及的表)的一个snapshot,query从这个snapshot中获得结果。没有commit的update不会在snapshot中出现,所以就不会被query到。

  这样允许Transaction 2并行执行,且不会影响Transaction 1。当Transaction 1 commit的时候,DBMS检测是否有冲突(比如Transaction 1也update了Transaction 2中update的row),如果执行的结果等同于顺序执行Transaction 1和 Transaction 2 ,则认为没有冲突。

  但这样也会有问题:Nonrepeatable Read,即可能执行同一query两次而出现不同的结果,我们认为这是不符合一致性原则的。

nonrepeatable read

 

3. Repeatable Read

  解决Nonrepeatable Read问题的办法是给Transaction 1中的SELECT涉及的行加一个read lock。

  锁的排斥功能很明确:read locks不会block read locks,只block write locks;write locks block both read locks and write locks。

  不过会有新的问题:phantom read。

 

phantom read

 

当Transaction 1执行一个range query(范围查询,如like, between等)时,只会为涉及到的row加read lock,如果插入一个新row在range之内,第二次range query还是会被读出。

 

4. Serializable

  强制Transactions按顺序执行,所以Transaction之间不可能冲突。强制的手段是给place a read lock on every row the transaction read;同时,如果有range query,还会添加一个range lock。明显,Serializable会耗费很多的lock overhead。

  Serializable相当于在Transaction 1开始时(而不是query开始时)给当前数据库(或是Transaction涉及的表)take a snapshot,Transaction 1中的所有query都从这一个snapshot中获取结果。

 

  • 大小: 4.9 KB
  • 大小: 5.3 KB
  • 大小: 4.4 KB
0
0
分享到:
评论

相关推荐

    spring事物的7大传播机制,5个隔离机制

    ISOLATION_READ_UNCOMMITTED 最低级别的隔离级别,允许一个事务读取另一个事务未提交的数据。这可能会导致以下问题: - **脏读**:一个事务读取了另一个事务未提交的数据。 - **不可重复读**:在一个事务中多次...

    yhangf#ML-NOTE#Isolation Forest算法梳理1

    $\ t\ $控制了$\ iTree\ $的数量即$\ Ensemble\ size \ $,孤立森林算法提出者通过实验发现,当$\ t=100\ $之前时,算

    Isolation Forest 源码Java版

    《Isolation Forest 异常检测算法的Java实现详解》 在大数据时代,异常检测成为了一项重要的任务,特别是在电商和金融领域,及时发现并处理欺诈行为对于企业的安全至关重要。Isolation Forest(隔离森林)是一种...

    isolationForest1.0.2.zip

    孤立森林(Isolation Forest)是一种基于机器学习的异常检测算法,尤其适用于大数据集中的异常值检测。该算法是由Liu et al.在2008年提出的,它利用了随机森林(Random Forest)的特性来识别数据集中的离群点。在...

    TRANSACTION ISOLATION LEVEL

    RANSACTION ISOLATION LEVEL

    A_Critique_of_ANSI_SQL_Isolation_Levels.pdf

    在介绍和分析数据库事务隔离级别的经典文献《A Critique of ANSI SQL Isolation Levels》中,作者Hal Berenson、Phil Bernstein、Jim Gray、Jim Melton、Elizabeth O’Neil和Patrick O'Neil深入探讨了ANSI SQL-92...

    oracle lock and isolation at

    在Oracle中,锁(Lock)和隔离级别(Isolation Level)是确保多用户环境下数据一致性和完整性的关键组成部分。本篇文章将深入探讨这两个概念及其在实际应用中的重要性。 一、Oracle锁机制 1. **锁定类型**: - **...

    Sliding mode observers for fault detection and isolation

    滑膜故障检测大牛Edwards的论文,发表于automatic期刊 Sliding mode observers for fault detection and isolation 非常详细的介绍了滑膜观测器

    java8看不到源码-say-my-name:基于Kubernetes的spring-boot微服务编排原型

    java8 看不到源码说我的名字 一个 spring-boot ...Isolation 目前,staging 环境与生产环境完全隔离,使用 kubernetes 命名空间进行 pod 级隔离 kubectl --namespace=staging apply -f k8s/services/staging

    Isolation Forest算法梳理1

    《Isolation Forest算法详解》 Isolation Forest,中文名为隔离森林,是一种用于异常检测的机器学习算法,尤其适用于处理大规模数据集。它以其高效、准确的特性,在网络安全、金融欺诈检测、疾病诊断以及数据清洗等...

    Matlab实现基于孤立森林(Isolation Forest)的数据异常数据检测可视化(完整源码和数据)

    Matlab实现基于孤立森林(Isolation Forest)的数据异常数据检测可视化(完整源码和数据)基于孤立森林(Isolation Forest)的数据异常数据检测可视化可直接运行注释清晰~Matlab1.多特征输入,可用于检测异常数据,异常...

    noise isolation

    how to isolate wafer substrate noise

    基于孤立森林(Isolation Forest)的数据异常数据检测可视化(Matlab完整源码和数据)

    基于孤立森林(Isolation Forest)的数据异常数据检测可视化(Matlab完整源码和数据) 运行环境matlab2018及以上。基于孤立森林(Isolation Forest)的数据异常数据检测可视化(Matlab完整源码和数据) 运行环境matlab2018...

    Cracking App Isolation on Apple

    Cracking App Isolation on Apple

    Isolation__Xinxin、4.3QQT_

    标题和描述中的“Isolation__Xinxin、4.3QQT_”可能是指一个特定的软件或项目,其中“Isolation”可能涉及到隔离技术,这在IT领域中常常指的是虚拟化或者安全隔离,比如软件容器或沙箱环境。而“4.3QQT”可能是版本...

    博达设备常用配置命令

    - `user-isolation disable`:在指定的接口上禁用用户隔离功能。这通常用于允许同一OLT端口下的不同ONU之间的通信。 #### 6. P2P访问策略配置 - **命令**: `BBS4000(config-t-if-olt-1/1)#p2p-access policing ...

    Isolation and Purification of ATP Synthase in Mitochondria

    在生物化学领域,ATP合酶是一种至关重要的酶,它在能量转换过程中起着核心作用,尤其是在细胞的线粒体中。线粒体是细胞的能量工厂,负责通过氧化磷酸化产生大部分细胞所需的ATP(三磷酸腺苷)。...

    LibIsolationForest:Isolation Forest异常检测算法的C ++,rust,julia,python2和python3实现

    有关算法的完整说明,请查阅算法创建者的原始论文:Python范例可以通过pip安装python实现: pip install IsolationForest 这是一个简短的代码片段,显示了如何使用该库的Python版本。 您也可以阅读文件test.py以...

Global site tag (gtag.js) - Google Analytics