当前位置:数据库 > 数据库管理> 正文

Sql Server锁的粒度

时间:2015-1-26类别:数据库

Sql Server锁的粒度

Sql Server锁的粒度

锁的粒度就是指锁的生效范围,就是说是行锁,还是页锁,还是整表锁. 锁的粒度同样既可以由数据库自动管理,也可以通过手工指定hint来管理。

为描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求

 

一、页锁实例

 

  • 
    T1:    select * from table (paglock)
    T2:    update table set column1='hello' where id>10
    
    		
  •  

    说明

    T1执行时,会先对第一页加锁,读完第一页后,释放锁,再对第二页加锁,依此类推。假设前10行记录恰好是一页(当然,一般不可能一页只有10行记录),那么T1执行到第一页查询时,并不会阻塞T2的更新。

     

     

    二、行锁实例

     

  • 
    T1:    select * from table (rowlock)
    T2:    update table set column1='hello' where id=10
    
    		

  • 说明

    T1执行时,对每行加共享锁,读取,然后释放,再对下一行加锁;T2执行时,会对id=10的那一行试图加锁,只要该行没有被T1加上行锁,T2就可以顺利执行update操作。
     

     

    三、整表锁实例

     

  • 
    T1:    select * from table (tablock)
    T2:    update table set column1='hello' where id = 10
    
    		
  •  

    说明

    T1执行,对整个表加共享锁. T1必须完全查询完,T2才可以允许加锁,并开始更新。

    以上3例是手工指定锁的粒度,也可以通过设定事物隔离级别,让数据库自动设置锁的粒度。不同的事物隔离级别,数据库会有不同的加锁策略。

     

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐