随笔分类 - transaction & Lock
摘要:当我们修改一个大表列宽度或者类型的时候可能会锁表,针对这个问题我做了一些测试: 一、首先附上完整的锁兼容性矩阵 对上图的是代码说明:见下图 二、没有主键的表测试如下: 当前的表没有主键,根据第三个会话得到如下图,一共是三个进程号:87,93,84,这3个都可以使用DBCC INPUTBUFFER()
阅读全文
摘要:之前一直以为Insert不会对表产生锁,而事实并非如此吧,下面给出一些实例和证明。 在会话1窗口中执行如下指令: 在会话2窗口中执行如下指令: 你会发现会话2的指令一直在等待,查看具体的锁情况 注: request_owner_id :你开了2个窗口,request_owner_id 就有2个 如上
阅读全文
摘要:本文的原文 SQL Server里的锁层级 当你读取一条记录时,SQL Server默认请求一个共享锁(S),当你修改一条记录时,SQL Server请求一个排它锁(X)。这2个锁彼此不兼容,当你同时向读写一条记录时,会发生阻塞。 另外对于行级别的锁,在锁层级里,SQL Server也会在更高一层请
阅读全文
摘要:前言: 本文的原文在这里,这个兄弟真心觉得挺厉害的,他的博客看过来,真的是从菜鸟到高手,向他学习,当然这个兄弟也是参考老外的文章,在这里,前面还有一篇文章,讲的是 更新锁 ,讲的也很好。由于我总是有一些自己的拙见需要加进去,所以没有直接转载,我已经备注了出处,希望作者不要介意。 锁层级(Lock H
阅读全文
摘要:前言: 在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如,进程process1对table1持有1个排它锁(X),同时process1对table2请求1个排它锁(X), 进程process2对table2持有1个排它锁(X),同时process2对
阅读全文
摘要:本文并不全是原创,我参考的原文在这里 背景: 当用户并发尝试访问同一数据的时,SQL Server尝试用锁来隔离不一致的数据和使用隔离级别查询数据时控制一致性(数据该如何读取),说起锁就会联想到事务,事务是一个工作单元,包括查询/更新数据和数据定义。 锁 锁类型 在SQL Server中,根据资源的
阅读全文
摘要:Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁 视图中主要的字段: 1. Spid:Sql Servr 会话ID 2. Kpid:Windows 线程ID 3. Blocked:正在阻塞求情的会话 ID。如果此列为 Null,则标识
阅读全文