SQL Server 中的事务和锁

10 2011 档案

 
摘要: 在上一篇中忘记了一个细节。Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避免幻读)。它由两个部分构成:第一个部分代表了他锁定了一个索引范围,在这个范围内,所有索引使用 T 锁进行锁定;第二个部分是而这个范围内已经命中的Key,这些 Key 将使用 K 锁进行锁定。合并在一起我们说在这个范围内,索引范围和特定的row的锁定模式为 Range T-K。举上一篇的一个例子吧:SELECT [data] FROM [MyTable] WHERE [index_column]&g阅读全文
posted @ 2011-10-25 23:23 夏天可是个好季节 阅读(1339) | 评论 (1) 编辑
 
摘要: 在这篇随笔中,我们的主要关注点在 Key-Range Lock。Key-Range Lock有 S-S、S-U、I-N、X-X几种情况。我们一个一个来说,力求明白。遗憾的是,这里可能会比较冗长,那么死锁分析只好依次顺延了。Range S-S锁的获取规则MSDN 对 Range 锁的规则有部分描述,但是言简意赅,以下我们会将各种情况分解开来,理清MSDN中涉及的或者未涉及的规则,这些规则适用于SQL Server 2000/2005/2008/2008 R2。关于MSDN的描述,请参见:http://technet.microsoft.com/zh-cn/library/ms191272(en-阅读全文
posted @ 2011-10-21 01:49 夏天可是个好季节 阅读(1538) | 评论 (4) 编辑
 
摘要: 最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:SELECT @findCount=COUNT(id) FROM MyTableWHERE [fk_related_id]=@ArgumentIF (@findCount > 0)BEGIN ROLLBACK TRANSACTION RETURN ERROR_CODEENDINSERT INTO MyTable ([fk_related_id],…)VALUES (@Argument,…)COMMIT TRANSACTIONRETURN SUCCESS_CODE在搞清楚这个阅读全文
posted @ 2011-10-20 00:43 夏天可是个好季节 阅读(2234) | 评论 (9) 编辑
 
 
原文地址:https://www.cnblogs.com/Leo_wl/p/2804910.html