牛人笔记----(死锁案例分析)

 1 --死锁案例分析 P333
  2 
  3 --先开启监视死锁的开关1222,让SQL遇到死锁时,在errorlog里打印出  4 --死锁的详细内容  5  6 DBCC TRACEON(1222,-1)  7  8 --这里使用范例表dbo.Employee_Demo_Heap  9  10 --这张表在EmployeeID和ManagerID字段上各有一个非聚集索引,但是没有聚集索引  11  12  13 --现在用下面脚本来模拟出一个死锁来。在一个连接里,运行下面语句,反复开启  14 --事务。在这个事务里,先修改一条NationalIDNumber='480951955'的记录,然后  15 --把他查询出来。完成以后,再提交事务  16  17 USE [AdventureWorks]  18 GO  19 SET NOCOUNT ON  20 GO  21 WHILE 1=1  22 BEGIN  23 BEGIN TRAN  24 UPDATE [dbo].[Employee_Demo_Heap]  25 SET [BirthDate] =GETDATE()  26 WHERE [NationalIDNumber]='480951955'  27 SELECT * FROM [dbo].[Employee_Demo_Heap]  28 WHERE [NationalIDNumber]='480951955'  29 COMMIT TRAN  30 END  31  32  33 --在另一个连接里也运行这些语句,唯一差别是这次修改和查询是另一条  34 --NationalIDNumber='407505660'的记录  35  36 USE [AdventureWorks]  37 GO  38 SET NOCOUNT ON  39 --当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。  40 GO  41 WHILE 1=1  42 BEGIN  43 BEGIN TRAN  44 UPDATE dbo.[Employee_Demo_Heap]  45 SET [BirthDate]=GETDATE()  46 WHERE [NationalIDNumber]='407505660'  47 SELECT * FROM [dbo].[Employee_Demo_Heap]  48 WHERE [NationalIDNumber]='407505660'  49 COMMIT TRAN  50 END  51  52  53 --两条语句一起运行,无须多长时间就会有其中一个连接遇到死锁的错误  54  55 --消息1205,级别13,状态45,第4行  56 --事务(进程ID 54)与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品  57 --请重新运行该事务  58  59 DBCC TRACEON(3604)  60 DBCC PAGE(9,1,6685,3)  61  62 --常见的四种解决死锁的方法  63 --1、调整索引,以调整执行计划,减少锁的申请数目,从而消除死锁  64 --如果死锁的双方不会申请对方要申请的锁,那么死锁也不会发生。如果  65 --数据库设计者能够引导SQL使用seek的执行计划,只读取要返回的数据,  66 --那么申请的锁数量会大大降低,死锁的几率也会减少  67  68 --上面的情况可以在NationalIDNumber字段上加一个索引,SQL可以更快地  69 --找到数据,而无须申请这麽多锁。执行计划都变成seek类型  70 USE [AdventureWorks]  71 CREATE 

转载于:https://www.cnblogs.com/lx823706/p/5458882.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值