关于sqlserver2005 数据库死锁与阻塞

在WEB开发中,经常遇到SQL Server 2005数据库死锁和阻塞的问题,表现为事务被选为死锁牺牲品或页面请求延迟。解决方法包括调整数据库隔离级别到READ_COMMITTED_SNAPSHOT,使用NOLOCK查询,按顺序访问对象,避免事务中用户交互,使用较低的隔离级别,以及绑定连接。遵循这些最佳实践能有效降低死锁和阻塞的发生概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家在进行WEB开发时.不知道是否遇到过如下问题

 

事务(进程ID 81)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务.

 

或页面请求阻塞.返回很慢....

 

产生原因:数据库中事务发生死锁或阻塞。

 

解决方法。降低数据库发生死锁与阻塞的概率

 

1:修改数据库隔离级别。使用行版本控制级别,设置数据库隔离级别为READ_COMMITTED_SNAPSHOT

ALTER DATABASE meeting
 SET READ_COMMITTED_SNAPSHOT ON;
GO

 

2:如果不修改数据库隔离级别。请在查询语句上手动设置其按 NOLOCK查询方式。或在使用事务时。手动设置基事务级别为READ COMMITTED

 

3:代码规范。

按同一顺序访问对象(如表)比如在两个事务中同时使用AB两个表。在事务中要顺序的访问两个表。避免交叉。

 

避免事务中出现与用户交互情况。如在程序中先开启事务。在等待用户输入。然后判断其是否成功。再决定是否提交事务。这是不可取的。

 

使用较低的隔离级别。可以指定某一事务的运行级别。或使用1方法。使用基于行版本控制的数据库级别。

 

使用绑定连接。

 

在编写代码时一定要注意代码的规范.防止发生死锁与阻塞的概率

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值