随笔分类 -  Database

摘要:在上一篇中忘记了一个细节。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 TW-刘夏 阅读(4305) 评论(1) 推荐(3) 编辑
摘要:在这篇随笔中,我们的主要关注点在 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 TW-刘夏 阅读(4243) 评论(7) 推荐(9) 编辑
摘要:最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 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 TW-刘夏 阅读(12062) 评论(16) 推荐(20) 编辑