欢迎投稿

今日深度:

擦亮自己的眼睛去看SQL Server之谈谈锁机制(1)(2)

6.2循环插入几十万条记录: 

  1. while 1 = 1 
  2. insert into test(Namevalues ('kk'

插入时的锁快照 :

从上图中看出这个快照中有:三个数据库共享锁、一个页级意向排他锁、一个表级意向排他锁、两个行级排他锁。

三个数据库共享锁:前面已经提过,默认某个连接对整个数据库有个共享锁;

一个页级意向排他锁、一个表级意向排他锁:在页以及表级表示资源的一部分实际已经有锁进行保护,这样的好处允许其他请求锁在表页级别上进行检查,减少不必要的更细的锁请求,提高性能。比如在这种情况下,如果允许alter操作那么这个操作就会等待因为这里有表级排他锁,它提示alter操作该表有活动。

6.3 跟踪Lock:Escalation事件

在profiler中设置只跟踪Lock:Escalation事件,锁升级事件。

6.4更新表中记录:

  1. update test set name = 'name' where name = 'kk' 

在profiler中看到了Lock:Escalation事件被触发:

更新时的快照为(按顺序):

如上图:此时update操作以排他锁定它更新的行。

如上图:此时update操作以排他锁锁定了整个表,以架构稳定锁(Sch-S)锁定它相关的元数据表。

如上图:此时释放了对元数据表的架构稳定锁(Sch-S)锁,剩下对整个表的排他锁。

从上面的分析中,发现SQLServer锁机制是有点复杂的,不过也是很有意思的。研究后,你会发现它真的很智能。今天分析就到此结束,文中如有描述不当的地方,欢迎指出。共同进步才是硬道理。


www.htsjk.Com true http://www.htsjk.com/shujukujc/18790.html NewsArticle 6.2循环插入几十万条记录: while1=1 insert into test( Name ) values ( 'kk' ) 插入时的锁快照 : 从上图中看出这个快照中有:三个数据库共享锁、一个页级意向排他锁...
评论暂时关闭