番茄的梦想

那一抹夕阳

  博客园  :: 首页  ::  :: 联系 :: 订阅 订阅  :: 管理

2012年11月6日

摘要: 在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如, 进程process1对table1持有1个排它锁(X),同时process1对table2请求1个排它锁(X), 进程process2对table2持有1个排它锁(X),同时process2对table1请求1个排它锁(X)类似这种情况,就会出现死锁,除非当某个外部进程断开死锁,否则死锁中的两个事务都将无限期等待下去。 Microsoft SQL Server 数据库引擎死锁监视器定期检查陷入死锁的任务。如果监视器检测到循环依赖关系,将选择其中一个任务作为牺牲品(通常是选择占资源比较小的进程作 阅读全文
posted @ 2012-11-06 18:45 番茄的梦想 阅读(517) 评论(0) 推荐(1) 编辑

摘要: 死锁(deadlock)指进程之间互相永久阻塞的状态,SQL可以检测到死锁,并选择终止其中一个事务以干预死锁状态。两个进程发生死锁的典型例子是:进程T1中获取锁A,申请锁B;进程T2中获取锁B,申请锁A,我们下面动手来演示一下这种情况:1. 创建一个Database,名为InvDB。2. 执行下面脚本创建person表并填充两条数据:3. 在SQL Server Management Studio的两个窗口中同时执行下面的查询:这段代码在默认的READ COMMITTED隔离级别下运行,两个进程分别在获取一个排它锁的情况下,申请对方的共享锁从而造成死锁。可见一个进程可以正常更新并显示结果,而另 阅读全文
posted @ 2012-11-06 18:44 番茄的梦想 阅读(371) 评论(0) 推荐(0) 编辑

摘要: 这两天发布服务器SQL Server日志中总报出现死锁,信息如下Replication-Replication Distribution Subsystem: agent xxxxxxxxxxxxxxxxx scheduled for retry. Transaction (Process ID XX) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. 尝试在发布服务器上开启跟踪标志1204DBCC TR 阅读全文
posted @ 2012-11-06 18:32 番茄的梦想 阅读(309) 评论(0) 推荐(0) 编辑