- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设置一个测试用例来证明某个死锁场景,并且需要对正在发生的事情有一些了解。我有一个堆表,通常称为 HeapTable。此表由 2 个事务模拟更新。
交易 1:
BEGIN TRAN
UPDATE HeapTable
SET FirstName = 'Dylan'
WHERE FirstName = 'Ovidiu';
WAITFOR DELAY '00:00:15';
UPDATE HeapTable
SET FirstName = 'Bob'
WHERE FirstName = 'Thierry';
ROLLBACK TRANSACTION
交易 2:
BEGIN TRAN
UPDATE HeapTable
SET FirstName = 'Pierre'
WHERE FirstName = 'Michael';
ROLLBACK TRAN
我首先触发事务 1,紧接着是事务 2。正如预期的那样,事务 1 将要求一些独占锁,以及一些意向独占锁。事务 2 将进入并请求对同一 RID 的更新锁定:
spid dbid ObjId IndId Type Resource Mode Status
55 5 711673583 0 RID 1:24336:10 X GRANT
57 5 711673583 0 RID 1:24336:10 U WAIT
我有点惊讶地看到第二个事务要求对同一个 RID 进行更新锁定,因为我认为这指向单个记录并且两个更新语句处理不同的数据。我以某种方式期望在页面级别发生冲突。
当事务 1 的第二次更新启动时,事务 2 将被视为死锁牺牲品,导致事务 2 回滚并完成事务 1。
有人能解释一下为什么第二个事务需要对同一个 RID 进行更新锁定,尽管它更新了不同的记录吗?
最佳答案
Can someone explain me why the second transaction would require an update lock on the same RID although updating a different record?
这可以改写为,当不存在索引时,Update 语句如何获取需要更新的表的锁。
SQL 在Page 上加一个intent Exclusive 锁,然后在读取它之前尝试在页面的行上加U 锁,如果它与要更新的值匹配,这个锁将转换为X 锁。 .
这个U锁策略是为了保证在同一行不会有其他不兼容的锁
请参阅 Kalen Delaney 的以下链接,了解有关同一内容的详细信息
http://sqlblog.com/blogs/kalen_delaney/archive/2009/11/13/update-locks.aspx
关于sql-server - 更新堆表 - RID 上的死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044796/
[TypeError: Cannot read property 'rid' of undefined] 这是当我尝试在我的帖子路由上执行此 Controller 时收到的错误。我已经用 Postma
我尝试使用java从orientdb获取所有数据。我的代码是 public static ArrayList viewAllDoctor(){ graph = factory.getT
我正在开发的应用程序支持印度尼西亚语言环境,我确实有 "values-in" "values-in-rID" 资源文件夹。两者均仅包含字符串。 我没有找到任何有关“values-in-rID”的信息。
例如,我们有一个带有聚簇索引 table1 (col1 int , col2 int , col3 int) 的表,为 col1 定义了聚簇索引,为 col2 定义了非聚簇索引,我们编写查询 - se
我是刚开始使用 BeanIO 2.1,但又遇到了问题。 我正在尝试解码一个固定长度的文件,该文件有一些记录分布在几行上,其中“rid”仅标记在这些行的第一行上 示例: :10:BLABLABLABLA
我正在尝试优化 QTC视频编解码器可以在 Raspberry Pi 上运行并具有不错的性能。一个重要的瓶颈是在范围解码器中完成的 32 位整数除法,它占用了 18% 的解码时间。由于设备的 ARM 处
我的build.gradle上有一个红叉叠加层。这很烦人,因为我无法查明它的来源。 有关我的项目的一些信息: 1. I am using sts-3.9.8.RELEASE as IDE 2. It
我有一项任务是建议对查询执行计划进行一些改进。该表是: CREATE TABLE [Contracts] ( [ContractId] [int] NOT NULL , [ContractNumb
我正在设置一个测试用例来证明某个死锁场景,并且需要对正在发生的事情有一些了解。我有一个堆表,通常称为 HeapTable。此表由 2 个事务模拟更新。 交易 1: BEGIN TRAN UPDATE
在 Orient-DB 2.0 rc1 上使用 Java api。 是否可以使用字符串作为 RID? 文档:https://github.com/orientechnologies/orientdb/
我一直在 GitHub 上查看 NuGet3 的代码,我在 https://github.com/NuGet/NuGet3/blob/a5bc907d36ddaa8d4fa6c499e50d7ebf8
我正在让主干路由器工作 App.Router = Backbone.Router.extend({ routes: { "todo": "todo" },
我正在编写一个简单的小部件来模拟一个简单的 8 位 CPU。为此,我正在滥用 Ace 编辑器,正如您在图像中心看到的那样,作为我的“RAM” View 。 我想突出显示对应于程序计数器值的行,我正在使
我有一个使用软件 (Polarion) 的 SOAP API 的 Java 应用程序,我收到 BeanDeserializer 的警告(不管是什么)我想抑制它,因为它们淹没了我的日志文件但没有已知影响
我有一组名为“ip”、“date”、“url”等的函数。 有了这些,我想生成另一组函数“ip-is”、“date-is”等。 我终于有了以下解决方案,效果很好,但是使用了“eval”。 (loop f
问题的实质如下: 有一个页面,我需要修改浏览器扩展的内容,可以使用jQuery。 已尝试 $(document).ready(),但内容仍会短时间显示 (FOUC)。我无法更改服务器上的页面样式。 我
当你创建 Azure Kubernetes 服务 (AKS) 时,它会默认创建一个负载均衡器和一个用于访问它的网络集。它在单独的资源组中创建它。 但是,我们对此负载均衡器完全不感兴趣,因为我们将使用
我正在执行以下假脱机语句: SET VERIFY OFF SET FEEDBACK OFF SET HEADING OFF SET TRIMSPOOL ON SET TERM OFF SPOOL &p
当你创建 Azure Kubernetes 服务 (AKS) 时,它会默认创建一个负载均衡器和一个用于访问它的网络集。它在单独的资源组中创建它。 但是,我们对此负载均衡器完全不感兴趣,因为我们将使用
假设我有一个像官方示例中那样的多对多关系: public class Student { [PrimaryKey, AutoIncrement] public int Id { get
我是一名优秀的程序员,十分优秀!