摘要: 概念介绍开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种。它等同于 READUNCOMMITTED 。 具体的功能作用如下所示(摘自MSDN): 1: 指定允许脏读。不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事... 阅读全文
posted @ 2015-08-27 18:35 雍洲无名 阅读(267) 评论(0) 推荐(0) 编辑
摘要: I used to see my senior developers use WITH (NOLOCK) when querying in SQL Server and wonder why they use. Now i explored it and found thatit's useful ... 阅读全文
posted @ 2015-08-27 18:12 雍洲无名 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 六、各种事务隔离级别发生的影响修改数据的用户会影响同时读取或修改相同数据的其他用户。即这些用户可以并发访问数据。如果数据存储系统没有并发控制,则用户可能会看到以下负面影响:·未提交的依赖关系(脏读)·不一致的分析(不可重复读)·幻读(一)脏读:例:张某正在执行某项业务,如下:begin tranin... 阅读全文
posted @ 2015-08-27 15:30 雍洲无名 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 五、锁与事务隔离级别事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务隔离级别将影响整条连接。SQLServer数据库引擎支持所有这些隔离级别:·未提交读(隔离事务的最低级别,只能保证不读取物理上... 阅读全文
posted @ 2015-08-27 11:18 雍洲无名 阅读(143) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2015-08-27 09:43 雍洲无名 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 二、完整的锁兼容性矩阵(见下图)对上图的是代码说明:见下图。三、下表列出了数据库引擎可以锁定的资源。名称资源缩写编码呈现锁定时,描述该资源的方式说明数据行RIDRID9文件编号:分页编号:Slot编号用于锁定堆中的单个行的行标识符。索引键KEYKEY76字节哈希值索引中用于保护可序列化事务中的键范围... 阅读全文
posted @ 2015-08-26 16:13 雍洲无名 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 锁定:通俗的讲就是加锁。锁定是MicrosoftSQLServer数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制。定义:当有事务操作时,数据库引擎会要求不同类型的锁定,如相关数据行、数据页或是整个数据表,当锁定运行时,会阻止其他事务对已经锁定的数据行、数据页或数据表进行操作。只有在当前... 阅读全文
posted @ 2015-08-26 14:24 雍洲无名 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 在上一篇中忘记了一个细节。Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避免幻读)。它由两个部分构成:第一个部分代表了他锁定了一个索引范围,在这个范围内,所有索引使用 T 锁... 阅读全文
posted @ 2015-08-25 17:00 雍洲无名 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 在这篇随笔中,我们的主要关注点在 Key-Range Lock。Key-Range Lock有 S-S、S-U、I-N、X-X几种情况。我们一个一个来说,力求明白。遗憾的是,这里可能会比较冗长,那么死锁分析只好依次顺延了。Range S-S锁的获取规则MSDN 对 Range 锁的规则有部分描述,但... 阅读全文
posted @ 2015-08-25 16:59 雍洲无名 阅读(191) 评论(0) 推荐(0) 编辑
摘要: SQL Server 的事务和锁(一)最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:1234567891011121314SELECT@findCount=COUNT(id) FROMMyTableWHERE[fk_related... 阅读全文
posted @ 2015-08-25 16:58 雍洲无名 阅读(190) 评论(0) 推荐(0) 编辑