Read Committed Snapshot和Snapshot Isolation

2024-03-08 04:58

本文主要是介绍Read Committed Snapshot和Snapshot Isolation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两种隔离级别都是通过行版本控制在tempdb中生成数据的复本来解决数据的写和读的时候发生锁及阻塞的问题的。不过snapshot isolation需要在数据库中执行
ALTER DATABASE Aesop
SET ALLOW_SNAPSHOT_ISOLATION ON
之后,然后在执行事务之前,设置连接的隔离级别
SET TRANSACTION ISOLATION LEVEL Snapshot;
BEGIN TRAN
SELECT Title
FROM FABLE
WHERE FableID = 2
这时候当发生第二个事务对fableid=2的行进行更新的时候,它可以进行更新,但是在更新事务提交之后,查询事务依然是无法查到更新事务所做的修改,它还是只能查询到原始的数据,这种情况类似于repeatable read隔离级别,但是在repeatable read下,更新事务是无法更新的,直到查询事务提交之后才可以。

Read Committed Snapshot Isolation只是针对sqlserver默认的read committed隔离级别的。使用它需要执行如下sql:
ALTER DATABASE Aesop
SET READ_COMMITTED_SNAPSHOT ON
如果数据库只是普通的read committed级别下,当执行一个更新事务但没有提交时,再执行一个对更新数据进行查询的事务,查询事务将无法查询,被阻塞,但是在 READ_COMMITTED_SNAPSHOT被打开的情况下,在上面那种情况中,查询事务将不会被阻塞,它能够查询到未更新前的数据。

说句最俗的,Snapshot Isolation是针对SET TRANSACTION ISOLATION LEVEL Snapshot;的,在使用的时候需要在事务前设置隔离级别,而Read Committed Snapshot Isolation完全不需要使用set transaction isolation,因为它是针对数据默认的read committed隔离级别的。   

这篇关于Read Committed Snapshot和Snapshot Isolation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/786082

相关文章

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

[轻笔记] pip install : Read timed out. (closed)

添加超时参数(单位秒) pip --default-timeout=10000 install ${package_name}

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso

王立平--Failed to push selection: Read-only file system

往android模拟器导入资源,失败。提示:只读文件、 mnt是只读文件。应点击sdcard,,在导入

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API import { defineStore } from 'pinia'   export const useCommonStore = defineStore('pack-store', {state: (): State => ({wwInfo: {},globalData: {},timerLoc

macos 系统文件操作时提示 Read-only file system 解决方法

这个情况是因为文件系统为只读, 需要我们执行一下命令重新将系统文件挂载为读写模式, 命令如下: sudo mount -uw / 这里的 mount 就是硬盘挂载命令, 后面的 -uw选项说明如下, 最后的 / 表示的是跟目录, 可以指定要修改的挂载路径,也可以默认. -u     -u标志表示应更改已装载文件系统的状态。上述任何选项(-o选项)都可以更改;文件系统也可以从只读更改为读写,

redis被攻击redis READONLY You can‘t write against a read only slave.

redis 日志路径 /var/log/redis 拿下来后发现有这种错误 Operation now in progress 可能是网络断开导致, 查找redis whereis redis 修改 vim /etc/redis.conf 大概在300行 下面代码yes改no slave-read-only no 重启redis sudo systemctl restart

【LINUX】“dmesg: read kernel buffer failed: Operation not permitted“ 错误

出现 “dmesg: read kernel buffer failed: Operation not permitted” 错误通常是因为当前用户没有权限读取内核日志缓冲区 这可以通过修改内核参数 kernel.dmesg_restrict 来解决。 你可以尝试以下命令来允许非特权用户读取内核日志: sudo sysctl -w kernel.dmesg_restrict=0 这个命令