什么是snapshot isolation
数据库常见的4种事务隔离级别:

(源自:(34条消息) 8. 事务隔离级别: 总结_oyw5201314ck的博客-CSDN博客_ck事务隔离)
大多数的数据库默认的事务隔离级别是Repeatable-Read或Read-Committed。
关于数据库的事务隔离级别有两个博主的博客写的比较容易懂,给出如下:
第一个博主:

第二个博主:
4. Serializable
这里也对这四种事务隔离级别说下个人的理解。总的说下,这四种级别其实都是针对多事务并行时的读操作的。
read uncommited是指一个事务在读某个数据时该数据已被另一个事务更新过,但是另一个事务还没有提交,此时该事务读取的值为另一个事务更新后的值,如果此时另一个事务回滚的话,那么这个事务读取到的数据变为脏数据;
read commited是指一个事务在读某个数据时这个数据可能被另一个事务更新过并已提交,那么在这个事务的多次查询中可以读取到的不同数值的该数据,因此不可避免重复读;
repeatable read是指一个事务在读某个数据时不受其他事务对这个数据的更新的影响,但是如果某数据不存在而其他事务插入了某数据,那么在这个事务中也是可以查询到这个数值的,而且事务本身对某个数据的插入和更新也是可以被被本事务所查询到的,尤其要注意由于repeatable read级别的事务隔离一般都是使用snapshot isolation方式来实现的,因此很多地方把repeatable read叫做snapshot isolation,repeatable read可以避免重复读但是无法避免幻读;
serializable可以看做是串行方式运行事务的,一个事务运行结束才可以运行其他事务,该种串行方式可以避免脏读、重复读、幻读。
解释一下脏读、重复读、幻读的个人理解:
脏读是指一个事务读到的数据是错误的,不是数据库中真正存在的数值,因为读到的数值被其他事务回滚,因此该数据是错误的。正如read uncommited级别无法避免脏读一样,脏读的原因就是一个事务可以读取到另一个事务还没有提交的数据。
重复读是指一个事务重复的多次读同一个数据会获得不同的数值,其产生的原因和read commited级别一样,是因为一个事务会读取到另一个事务提交的数值,或者说一个事务对某个数据的查询会受其他事务的提交所影响。
幻读是指一个事务多次查询某个数据时会读取到其他事务插入的数据。repeatable read虽然可以保证一个事务多次读取一个存在的数据时会获得相同结果,但是不能保证多次查询的结果会因为读到之前不存在的数据行(被其他事务插入的)而不同。
脏读(dirty reads)是指读到了错误的数据。
不可重复读, 也即一个事务范围内两个相同的查询却返回了不同数据。
幻读,也即在一次事务范围内多次进行查询,如果其他并发事务中途插入了新的记录,那么之后的查询会读取到这些“幻影”行。不可重复读对应的是修改即Update,幻读对应的是插入即Insert。
隔离级别为Serializable时,其执行事务时会阻塞其他并发事务,从上面的错误信息中我们也可以看出应该是通过某种锁来实现的。既然是这样,那么“脏读”、“不可重复读”和“幻读”自然是不可能发生了。
(源自:)
=====================================
上面虽然给出了四种事务隔离的级别,但都是关于读的问题,而事务并行写时往往会有 Lost Updates 和 Write Skew 问题。隔离级别--read committed and snapshot isolation - 知乎 (zhihu.com)对这两个问题解释的不是很形象,于是结合一下(34条消息) 写偏斜(Write Skew)和丢失更新(Lost Updates)区别_软件工程小施同学的博客-CSDN博客会更加清晰。
可以说lost updates是指多个事务对某个数据进行先读后写的操作时存在后提交的事务覆盖掉先提交的事务对该数据的修改,导致先提交的事务进行的update丢失;write skew是指事务A读取某数据XXX,然后根据XXX计算出数据YYY的数值,但是在YYY数值写入数据库之前(也就是在事务A进行commit之前),事务B对数据XXX进行了修改并完成提交(执行了commit操作),这样所造成的不一致性叫做write skew。
=====================================
参考:
隔离级别--read committed and snapshot isolation - 知乎 (zhihu.com)
(34条消息) 写偏斜(Write Skew)和丢失更新(Lost Updates)区别_软件工程小施同学的博客-CSDN博客
什么是snapshot isolation的更多相关文章
- 数据库的快照隔离级别(Snapshot Isolation)
隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而不会影响写操作申请的互斥锁(Exclusive Lock),隔离级 ...
- 转:数据库的快照隔离级别(Snapshot Isolation)
数据库的快照隔离级别(Snapshot Isolation) 隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而 ...
- 对snapshot isolation和write-snapshot isolation的一些思考
数据库中存在读异常和写异常. 所谓snapshot,目的在于保证事务执行的各个阶段,读相同的数据项得到的结果没有变化,这样一来就避免了不可重复读.幻读等读数据异常. 但是仅仅是读数据不变还不够,因为这 ...
- In-Memory:内存优化表的事务处理
内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...
- Microsoft SQL Server中的事务与并发详解
本篇索引: 1.事务 2.锁定和阻塞 3.隔离级别 4.死锁 一.事务 1.1 事务的概念 事务是作为单个工作单元而执行的一系列操作,比如查询和修改数据等. 事务是数据库并发控制的基本单位,一条或者一 ...
- Expert 诊断优化系列------------------给TempDB 降温
前面文章针对CPU.内存.磁盘.语句.等待讲述了SQL SERVER的一些基本的问题诊断与调优方式.为了方便阅读给出导读文章链接方便阅读: SQL SERVER全面优化-------Expert fo ...
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
- Azure SQL Database Active Geo-Replication简介
笔者在<迁移SQL Server 数据库到 Azure SQL 实战>一文中,介绍了如何把一个本地版的 SQL Server 数据库迁移到 Azure SQL Database.迁移虽然顺 ...
- Optimistic Concurrency VS. Pessimistic Concurrency Control
原创地址:http://www.cnblogs.com/jfzhu/p/4009918.html 转载请注明出处 (一)为什么需要并发控制机制 并发控制机制是为了防止多个用户同时更改同一条数据,也 ...
- EntityFramework之异步、事务及性能优化(九)
前言 本文开始前我将循序渐进先了解下实现EF中的异步,并将重点主要是放在EF中的事务以及性能优化上,希望通过此文能够帮助到你. 异步 既然是异步我们就得知道我们知道在什么情况下需要使用异步编程,当等待 ...
随机推荐
- 聊聊GLM-4-9B开源模型的微调loss计算
概述 Github官方地址:GLM-4 网上已经有很多关于微调的文章,介绍各种方式下的使用,这里不会赘述.我个人比较关心的是微调时的loss计算逻辑,这点在很多的文章都不会有相关的描述,因为大多数人都 ...
- C#/.NET/.NET Core拾遗补漏合集(24年6月更新)
前言 在这个快速发展的技术世界中,时常会有一些重要的知识点.信息或细节被忽略或遗漏.<C#/.NET/.NET Core拾遗补漏>专栏我们将探讨一些可能被忽略或遗漏的重要知识点.信息或细节 ...
- Python中的属性
Python中的属性主要分为类属性,对象属性. 1.类属性 类属性:类所有,所有的实例对象都能够共享,类定义时就直接指定的属性,能通过类名和实力对象名访问,当当前的类属性被实例对象通过对象名.属性名的 ...
- vue.config.js配置优化
vue.config.js完整代码如下: 'use strict'; // Template version: 1.3.1 // see http://vuejs-templates.github.i ...
- python-pytest:多进程、多线程执行用例
准备工作: Python Package pytest-parallel-0.0.10: windows版本只能是0.0.10 pytest-xdist 这两个包都是基于pytest基础上,实现多进程 ...
- AGC044C Strange Dance
在2020年A卷省选day2t2有类似操作trie的技巧. 题目链接 显然是建一棵三叉trie树,代表0/1/2 对这棵trie树,我们需要支持子树交换和全局加1 考虑第一个操作怎么做?直接打个懒标记 ...
- ClickHouse介绍(四)ClickHouse使用操作
ClickHouse使用操作 这章主要介绍在ClickHouse使用的各个操作的注意点.常规的统一语法不做详细介绍. 1. Join操作 在ClickHouse中,对连接操作定义了不同的精度,包含AL ...
- 最新最全的BMS/EMS/PCS六大国产“储能方案”,不信你全都看过!
作为国内领先的嵌入式产品平台提供商,创龙科技在"能源电力"行业拥有超过1000家客户,接下来就让小编向大家分享创龙科技推出的BMS/EMS/PCS"六大储能方案" ...
- 案例源码公开!分享瑞芯微RK3568J与FPGA的PCIe通信案例,嵌入式必读!
ARM + FPGA架构有何种优势 近年来,随着中国新基建.中国制造2025的持续推进,单ARM处理器越来越难满足工业现场的功能要求,特别是能源电力.工业控制.智慧医疗等行业通常需要ARM + F ...
- Math.random()方法的使用及公式
条件1:取n-m范围的随机数(不包含m) 公式1:(int)(Math.random() * (m - n) + n); 条件2:取n-m范围的随机数(包含m) 公式2:(int)(Math.rand ...