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

发表于:2011-8-18 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小军人    来源:51Testing软件测试网采编

  6、举例说明

  6.1建库建表:

  • create database Test 
  • create table test 
  • ID identity(1,1) primary key
  • [Namevarchar(50) not null default ''
  • CreatedTime datetime not null default getdate(); 
  • )
  •   查看当前锁情况:

      默认某个连接对整个数据库有个共享锁。

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

  • while 1 = 1 
  • insert into test(Namevalues ('kk')
  •   插入时的锁快照:

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

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

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

      6.3 跟踪Lock:Escalation事件

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

      6.4 更新表中记录:

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

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

    32/3<123>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号