单个 SQL Server 表上的死锁

2024-01-01

我正在使用 SQL Server 2008 Enterprise。并使用ADO.Net + C# + .Net 3.5 + ASP.Net作为客户端访问数据库。当我访问 SQL Server 2008 表时,我总是从 C# + ADO.Net 代码调用存储过程。

我对表 FooTable 有 3 个操作。而多个连接会同时按顺序执行它们,即执行删除,执行插入,然后执行选择。每个语句(删除/插入/选择)都是单个存储过程中的单独事务。

我的问题是delete语句是否有可能发生死锁?我的猜测是,如果多个连接对同一个Param1值进行操作,是否有可能发生死锁?

BTW:对于下面的语句,Param1是表FooTable的列,Param1是另一个表的外键(指另一个表的另一个主键聚集索引列)。 Param1 本身没有表 FooTable 的索引。 FooTable 还有另一列用作聚集主键,但没有 Param1 列。

create PROCEDURE [dbo].[FooProc]    
(  
 @Param1 int 
 ,@Param2 int  
 ,@Param3 int  
)    
AS    

DELETE FooTable WHERE  Param1 = @Param1     

INSERT INTO FooTable    
 (  
 Param1  
 ,Param2  
 ,Param3  
  )    
 VALUES    
 (  
 @Param1  
 ,@Param2  
 ,@Param3  
  )    

DECLARE @ID bigint    
 SET @ID = ISNULL(@@Identity,-1)    
 IF @ID > 0    
 BEGIN    
      SELECT IdentityStr FROM FooTable WHERE ID = @ID 
 END

这是活动监视器表的样子,

ProcessID System Process Login Database Status Opened transaction Command Application Wait Time Wait Type CPU 
52 No   Foo suspended 0 DELETE .Net SqlClient Data Provider 4882 LCK_M_U 0 
53 No George Foo suspended 2 DELETE .Net SqlClient Data Provider 12332 LCK_M_U 0 
54 No George Foo suspended 2 DELETE .Net SqlClient Data Provider 6505 LCK_M_U 0 
(a lot of rows like the row for process ID 54)  

我会将 Param1 上的索引添加到 FooTable;如果没有它,DELETE 就会进行全表扫描,这会产生死锁问题。

EDIT

根据您的活动详细信息,您似乎没有出现死锁,而是出现阻塞,在发生一项删除时,许多删除正在排队。同样,在 Param1 上建立索引可以缓解这种情况,如果没有它,每个删除都将进行全表扫描以查找要删除的记录,而在这种情况下,其他删除必须等待。如果您在 Param1 上有索引,它将处理得更快,并且您不会看到现在的阻塞。

如果出现死锁,系统将杀死相关进程之一,否则什么也不会处理;通过阻塞,事情会处理,但如果表很大,速度会很慢。

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

单个 SQL Server 表上的死锁 的相关文章

随机推荐

  • 通过 Button 向 Php 函数传递值

    我是 php 初学者 目前正在管理面板上工作 你可以看到我的管理面板页面 问题是我想通过这两个按钮传递序列号以进一步执行 但我找不到如何发送 value编辑和删除特定行 div strong h3 Admin page h3 strong
  • 检测当前页面是否加载AngularJS的方法

    如何检测当前页面是否加载了 AngularJS 我想从 CDN 加载 AngularJS 如果失败 我想从 LocalServer 加载 以下脚本针对 JQuery 执行此操作
  • Spring中ApplicationContext.xml和属性文件的位置

    在我的应用程序中 我放置了ApplicationContext xml文件放在 src 中 项目运行良好 我们可以放置ApplicationContext xml在我们的 WebContent 或 Web Inf 文件夹中 我还想知道是否可
  • 搜索具有不同列的多个表

    我想为我的网站建立一个搜索引擎 我的数据库表列表如下 d name 我需要搜索two列 em 我需要搜索one column seri 我需要搜索one column topics 我需要搜索one column 许多其他表的数量是动态的
  • 行在 Android 布局中无法正确呈现。按钮似乎是问题

    我是 Android 开发新手 我的 XML 布局遇到了问题 当我只有包含文本和 edittext 的行时 布局保持正常 但是一旦我将带有按钮的行放在下面 下面的行就会消失在屏幕下方 这些行彼此渲染得很远 我做错了什么 我的应用程序的 iP
  • java CompletableFuture 相当于 scala Future 的救援和句柄是什么

    我看到CompletableFuture有一个方法handle与 scala 相同Future s handle基本上将成功和异常全部转换为成功map and flatMap上游 或thenApply and thenCompose在Jav
  • Go:同一包中未定义的函数[重复]

    这个问题在这里已经有答案了 我已经开始 Go 并试图遵循这个tutorial https www activestate com blog 2017 04 creating web app using golang gorilla web
  • 摆脱 Scala Future 嵌套

    当一个函数依赖于一些未来的结果时 我一次又一次地陷入困境 这通常可以归结为像 Future Seq Future MyObject 这样的结果 为了摆脱这个问题 我现在在辅助函数中使用 Await 来获取非未来对象并减少嵌套 看起来像这样
  • NPOI 格式错误

    我正在开发一个会计软件 它还将创建 Excel 格式的报告 xls 我几乎在每个需要 Excel 报告的项目中都使用过 NPOI 没有出现任何重大问题 但我现在面临一个问题 似乎无法通过浏览互联网找到任何解决方案 正如您所看到的 在报表中途
  • 什么是 PL-Unit 中的“选择点测试成功”警告,如何修复它?

    我正在编写一个序言程序检查变量是否为整数 我 返回 结果的方式很奇怪 但我认为这对于回答我的问题并不重要 测试 我写过passing针对此行为的单元测试 他们来了 foo test pl begin tests foo consult fo
  • 获取数组内数组的总和[重复]

    这个问题在这里已经有答案了 我如何获得sum这个数组的 arrays 0 176000 0 500 0 3960000 The output应该 arrays 0 4136500 任何帮助都感激不尽 使用可变参数和null第一个回调arra
  • 自定义 REST 协议基于二进制而不是像 Http 这样基于文本是一件好事吗?

    您是否曾经见过创建自定义二进制休息协议而不是使用基本的 http 休息实现的充分理由 我目前正在 Net 中开发面向服务的架构框架 负责托管和使用服务 我不想基于像 Remoting 或 WCF 这样的现有框架 因为我想要完全的灵活性和控制
  • 数组内的多个嵌套组

    我在 MongoDB 中有一组元素 如下所示 1 id ObjectId 58736c7f7d43c305461cdb9b Name Kevin pb event event type Birthday event date 2014 08
  • Bootstrap 模态动态内容

    我需要一种方法来加载可以随时更改的动态内容 根据 Bootstrap 文档 a href remote htm Click me a 正在利用 jQuerys load仅加载内容once 它将内容注入到 modal content div
  • 避免在 R 中的 cut 函数中使用科学记数法

    如何避免在 cut 函数创建的区间中出现科学记数法 a lt seq 10000 50000 by 500 cut a breaks seq 0 max a 300 by 300 我已经尝试过以下方法 但没有帮助 options scipe
  • MonoTouch、Sharepoint Web 服务和 xs:any

    有人接到网络服务电话上班吗与 SharePoint与 MonoTouch MonoDevelop Mono 一起操作 我能够从典型端点 本例中为 vti bin Lists asmx 获取 WSDL 并且 MonoDevelop 按预期创建
  • jQuery:如何获取选中的单选按钮的索引

    我最近发现了一个 StackOverflow 答案 其中给出了关于如何使用 jQuery 获取选中的单选按钮的值 https stackoverflow com questions 596351 how can i get which ra
  • Bootstrap 3 RC 1 中的 typeahead JavaScript 模块在哪里?

    如您所知 Bootstrap RC 1 已经发布 我一直在阅读这个新框架中所有令人敬畏的新功能 但你猜怎么着 打字头不在文档中 有谁知道这是否是出于任何原因 I found 这些例子 http twitter github io typea
  • Java如何将2011-11-06T14:34:16.679+02:00设置为XMLGregorianCalendar

    我正在构建 JAXWS 客户端 方法之一是获取 XMLGregorianCalendar 现在我需要格式化这些数据2011 11 06T14 34 16 679 02 00设置为 XMLGregorianCalendar 如何做呢 该日期是
  • 单个 SQL Server 表上的死锁

    我正在使用 SQL Server 2008 Enterprise 并使用ADO Net C Net 3 5 ASP Net作为客户端访问数据库 当我访问 SQL Server 2008 表时 我总是从 C ADO Net 代码调用存储过程