关于隔离级别3下,查询的锁问题
sybase 12.5版本表T_sample为datarows锁。
执行语句
select * from T_sample holdlock where id="100"
表T_sample中只有1条id="100"的记录。
sp_lock查看锁持有情况:
fid spidloid locktype table_id page
row dbname class
context
------ ------ ----------- ---------------------------- ----------- -----------
------ --------------- ------------------------------
----------------------------
0 26 52 Sh_intent 144000513 0
0 testdb Non Cursor Lock
0 26 52 Sh_row 144000513 641
0 testdb Non Cursor Lock
Range
0 26 52 Sh_row 144000513 641
1 testdb Non Cursor Lock
Range
为什么会对641页的0和1两行记录持有共享锁呢?
我定性的认为应该只持有0行,也就是id=“100”这条记录的锁啊!
1行是id="200"的记录。
请赐教!
回复 #1 feiachen 的帖子
同样,在隔离级别3下,如果update一个不存在的记录,也会产生一个共享锁,这是为什么 用dbcc page 看一下641页的内容回复 #3 chuxu 的帖子
641页0行是id=‘100’的行,1行是id=‘200’的行,就是这样 怀疑同一个transaction里选择了两次。至于更新产生共享锁和isolation level 3的目的有关,看看performance tunning 的isolation level effect locking部分
页:
[1]