读已提交隔离级别是否会导致死锁(Sql Server)?

2024-03-17

我的理解deadlocks是 - 两个进程试图争夺同一资源 - 通常是两个进程试图“写入”同一行数据。

如果一个进程所做的只是读取数据,而另一个进程正在更新数据,那么这怎么会是资源争用呢?然而,在我们的数据库中,它被设置为默认事务级别ReadCommitted,我们看到几个死锁异常。

ReadCommited 定义- 无法读取已修改(但尚未提交)的数据。这很好,但是如果 SQL Server 遇到这种情况,它是否应该抛出死锁异常dirty read正在发生?

有人对这种情况有现实经验吗?我发现一篇博客文章(由 stackoverflow 开发人员撰写,同样如此:)声称这可能是真的。


已提交读事务隔离级别最初获得Shared Lock在资源上,即在读取行时,但是当我们尝试更新该行时,它会获得Exclusive lock关于资源。多个用户可以在同一行上拥有共享锁,这不会产生影响,但是一旦一个用户尝试更新一行,它就会在该行上获得独占锁,这可能会导致 Adead lock当用户最初由于行上的共享锁而可以看到该记录时,但现在当用户尝试更新它时,第一个用户已经拥有了排他锁。想象这样一个场景,用户 1 和用户 2 都有共享锁,当他们尝试更新某些记录时,他们都会在其他用户提交事务所需的行上获得独占锁。这将导致死锁。
如果发生死锁,如果Priority Level is not setSQL Server 会等待一段时间,然后就会RollBack该交易是cheaper回滚。
Edit
是的,如果用户 1 仅读取数据并且用户 2 尝试更新某些数据并且该表上有非聚集索引,则这是可能的。

  1. User1 正在读取一些数据并获取非聚集索引上的共享锁以执行查找,然后尝试获取包含数据的页面上的共享锁以返回数据本身。

  2. 正在写入/更新的用户2首先获取包含数据的数据库页上的排它锁,然后尝试获取索引上的排它锁以更新索引。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读已提交隔离级别是否会导致死锁(Sql Server)? 的相关文章

随机推荐

  • vim + iterm:如何使用鼠标执行除选择之外的所有操作?

    好的 有一个非常具体的设置问题 我使用的是 Mac OS X iTerm 和 vim 我真的很喜欢使用鼠标在正常模式下单击选项卡 在正常模式下滚动等 例如 我鼠标已经可以工作了在 iTerm vim 中 但是 我不喜欢使用视觉模式进行选择
  • 在构建期间将 Visual Studio 项目文件复制到输出目录

    当我生成 Visual Studio 项目时 可执行文件将写入项目属性页中指定的输出目录 我有一个包含一些额外文件的项目 例如 ini文件 由程序使用 如何配置项目以将文件复制到输出目录 以便当程序运行时 它的 CWD 中有另一个文件的副本
  • 优化 Node.js 内存消耗

    我正在用 Node js Express 和 MongoDB 编写一个简单的 cms 我计划为每个站点运行不同的 Node js 进程 问题是启动后该进程需要大约 90m 的 RAM 对我来说太大了 8 个站点占用了所有服务器 RAM 该内
  • 删除从另一个指针分配的指针,我应该再次删除另一个指针吗?

    所以 这是我的例子来解释这个问题 void p1 int p2 p3 p2 new int p1 p2 p3 int p1 要释放内存 以下 3 行是否彼此等效 delete p2 delete p3 delete int p1 我使用这样
  • 嵌套循环、内循环并行化、重用线程

    免责声明 以下示例只是一个快速理解问题的虚拟示例 如果您正在考虑现实世界的问题 请考虑任何动态编程 问题 我们有一个 n m 矩阵 我们想要复制前一行的元素 如以下代码所示 for i 1 i lt n i for j 0 j lt m j
  • Erlang 记忆的简单示例

    假设您有一个简单的函数 对于较大的值来说 它的成本可能会相当高 fact 0 gt 1 fact N gt N fact N 1 在哪里可以找到使用缓存 或记忆 函数值的简单示例dets 任何其他方便记忆的方法都将受到高度赞赏 根据您的情况
  • symfony2 表单复选框分组(扩展和多项选择)

    在我的表单类型中我有这个 builder gt add options choice choices gt choices multiple gt true expanded gt true label gt false 选择是一个数组 c
  • 为什么SQL不支持“= null”而不支持“is null”?

    我不是在问if确实如此 我知道事实并非如此 我很好奇原因 我已阅读过诸如此之类的支持文档关于在 MySQL 中使用 Null 值 http dev mysql com doc refman 5 0 en working with null
  • Eclipse 打开空白工作区

    我什至不知道在哪里寻找这个问题 发生的情况是 当我打开 Eclipse 时 它 会打开一个空白工作区 然后我必须切换到当前的 现在每次打开 Eclipse 都会发生这种情况 知道我应该在哪里解决这个问题吗 日食朱诺 看看 eclipse安装
  • 为转译而构建的抽象(编程)语言

    介绍 我经常遇到这样的情况 库是用特定的编程语言编写的 这很好 如果我想以同一种语言使用该库 但如果我想使用不同的语言 这将是一个问题 这并不意味着可能存在或多或少的 hacky 方式 对于某些库 我感觉它们是用特定的编程语言编写的 只是因
  • 如何使用 markdown 按顺序编写两个单独的块引用?

    我需要按顺序放置两个块引用 但是 markdown 将它们组合成一个块引用 我能让它们分开的唯一方法是在它们之间放置一些垃圾文本 由于此文本字段允许我使用 Markdown 因此我可以演示 gt First Quote gt Second
  • 如何从 Emacs 中的混乱情况中恢复?

    我刚刚开始使用 Emacs 有时我会尝试一些东西 当我完成实验时 我想返回到我正在编辑的缓冲区 但我不知道如何做 更糟糕的是 有时我不小心敲到了一个键 甚至不知道我敲到了什么 在 Vim 中 我只需按 ESC 即可恢复 Emacs中有没有类
  • 指定 Random.nextInt() 的最大值和最小值? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 生成一定范围内的随机数 https stackoverflow com questions 363681 java generating random number in a range 我
  • 从 Jest 到 stdout 再到 GitLab 的代码覆盖率

    我正在 GitLab CI 中运行代码覆盖率的玩笑测试 GitLab 从 gitlab 中运行程序的标准输出捕获百分比 jest coverage在 stdout 中生成覆盖范围 并且 gitlab 使用以下命令捕获它 All files
  • 从javascript中的字符串中提取带有“=”的变量的最佳方法是什么

    我想从这样的字符串中提取变量名称 foo valor bar second 等等 回来 foo valor bar second 您可以使用正则表达式展望 https www regular expressions info lookaro
  • Cassandra 时间序列数据模型

    我正在研究用于存储时间序列的 Cassandra 数据模型 我是 Cassandra 新手 我有两个应用程序 日内股票数据和传感器数据 股票数据将以一分钟的时间分辨率保存 七个数据字段构建一个时间范围 符号 日期时间 开盘价 最高价 最低价
  • 如何测试两个时间范围是否重叠?

    我需要实现预订功能并确保预订不会在 Rails 应用程序中重叠 The cover and between 方法不太符合我的需要 与同一模型上的其他潜在范围相比 我必须确保时间范围的唯一性 并高效地做到这一点 我认为可以使用overlaps
  • Python:Ascii字符<->十进制表示转换

    您好 我需要能够将 ascii 字符转换为其十进制等效字符 反之亦然 我怎样才能做到这一点 num ord char char chr num 例如 gt gt gt ord a 97 gt gt gt chr 98 b 您可以阅读有关 P
  • 添加不存在的订单元数据以扩展 WooCommerce 管理订单对特定产品的搜索

    继我之前的问题之后 我还有一个问题 添加不存在的订单元数据以扩展 WooCommerce 管理订单搜索 https stackoverflow com questions 77206771 add unexisting order meta
  • 读已提交隔离级别是否会导致死锁(Sql Server)?

    我的理解deadlocks是 两个进程试图争夺同一资源 通常是两个进程试图 写入 同一行数据 如果一个进程所做的只是读取数据 而另一个进程正在更新数据 那么这怎么会是资源争用呢 然而 在我们的数据库中 它被设置为默认事务级别ReadComm