1、按同一顺序访问对象
如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存储过程用于所有的数据修改可以标准化访问对象的顺序。
2、避免事务中的用户交互
避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用程序请求参数的提示。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。
3、保持事务简短并在一个批处理中
在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。
保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁。
4、使用低隔离级别
确定事务是否能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺。
5、使用绑定连接
使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞
6、SELECT语句加With(NoLock)提示
默认情况下SELECT语句会对查询到的资源加S锁(共享锁),S锁与X锁(排他锁)不兼容;但加上With(NoLock)后,SELECT不对查询到的资源加锁(或者加Sch-S锁,Sch-S锁可以与任何锁兼容);从而可以是这两条SQL可以并发地访问同一资源。当然,此方法适合解决读与写并发死锁的情况,但加With(NoLock)可能会导致脏读。
参考资料: sql server中的死锁 http://www.studyofnet.com/news/335.html
相关推荐
"SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...
### SQL Server 死锁排查与解决方法 #### 一、SQL Server Profiler 监控数据库死锁 在处理SQL Server数据库中的死锁问题时,一个非常实用的工具就是SQL Server Profiler。它可以帮助我们捕捉到数据库运行过程中的...
在SQL Server数据库管理系统中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。死锁不仅影响数据库的正常运行,还可能导致数据一致性问题。本文将详细介绍如何在...
### SQL Server 数据库死锁查询存储过程解析 #### 标题与描述理解 标题与描述均指出本篇讨论的主题是“查询SQL Server数据库死锁存储过程”。这表明文章旨在介绍一个用于检测SQL Server环境中发生的死锁现象的...
SQL Server死锁是数据库系统中常见的问题,它发生在两个或多个事务之间,因为它们相互等待对方释放资源,导致事务无法继续执行。理解死锁的原因和解决策略对于优化数据库性能至关重要。 首先,我们要深入理解死锁的...
### SQL Server死锁总结 #### 一、死锁原理 死锁是计算机系统中常见的问题之一,特别是在数据库管理系统中,由于并发控制不当可能导致系统性能下降甚至完全停止响应。在SQL Server中,死锁指的是两个或多个事务...
在SQL Server数据库管理中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源时。本文将深入探讨如何使用SQL Server Profiler工具来监视和分析死锁,以便更好地理解和解决这类问题。 首先,...
本过程自动捕捉SQLSERVER中的死锁进程并且自动杀掉
### SQL Server死锁查询知识点详解 #### 一、SQL Server中的死锁概念 在SQL Server中,当两个或多个事务互相等待对方释放资源时就会发生死锁。这通常发生在两个或更多的事务请求锁定同一资源的不同部分(如行、页...
在SQL Server数据库管理中,死锁是一个常见的问题,它发生在两个或多个事务相互等待对方释放资源,从而导致所有事务都无法继续执行的情况。SQL Server提供了多种工具和方法来检测和分析死锁,以便管理员能够及时发现...
那么,如何避免和解决SQL Server数据库死锁问题呢?首先,我们需要了解SQL Server数据库的锁机制。SQL Server数据库的锁机制可以分为不同的锁模式,例如共享锁、更新锁、排它锁、结构锁、意向锁、批量修改锁等。每种...
在sql server 运行过程中,容易产生死锁,该代码提供了一个查询死锁进程并抛弃的方法。供参考。
### SQL Server 死锁检测详解 #### 死锁的基本概念 死锁是计算机科学领域一个重要的概念,尤其在数据库管理系统中极为关键。死锁的本质是一种僵持状态,它发生在两个或多个事务相互等待对方释放资源时,从而导致...
sqlserver 解除死锁,网络上看到的很实用分享给大一起用
本文将深入探讨SQL Server死锁的概念、原因、检测方法以及如何有效地解决和预防死锁。 1. **死锁的概念** 死锁是系统资源分配的一种状态,其中两个或更多的事务相互等待对方释放资源,形成一个循环等待链,导致...
用于sqlserver优化使用,可定位死锁,并查询死锁语句。
### SQL Server 死锁处理详解 #### 一、引言 在 SQL Server 数据库系统中,当两个或多个事务在等待对方释放资源时,就会发生死锁现象。死锁不仅会降低系统的整体性能,还可能导致数据处理异常中断,严重影响业务...
/**//*--调用示例 exec p_lockinfo 0,1 --*/ create proc p_lockinfo @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉...@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
"SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决这些死锁情况,以避免系统阻塞和性能下降。 1. **死锁的基本概念**: 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一...