幻像锁(有时也称为防插入锁)放置在扫描位置上以防止其它事务随后创建幻像行。获取了幻像锁后,它可以防止其它事务在表中被放置了防插入锁的行与前一行之间插入新行。幻像锁是长期锁,它会一直保持到事务结束。
只有以隔离级别 3 运行的事务才能获取幻像锁;只有该隔离级别可保证幻像的一致性。
对于索引扫描,通过索引读取的每行上都会获取幻像锁,且会在索引扫描的末尾获取一个额外的幻像锁,以防止在满足条件的索引范围的末尾处向索引插入行。索引扫描上的幻像锁可防止向表中插入新行时创建幻像,也可防止会导致在幻像锁所在位置创建索引条目的索引值的更新。
对于顺序扫描,表中的每行上都会获取幻像锁,以防止任何插入操作变更结果集。因此,隔离级别 3 扫描通常会对数据库并发产生负面影响。虽然一个或多个幻像锁会与插入锁冲突,而一个或多个读锁定会与写锁定冲突,但是幻像锁/插入锁和读锁定/写锁定之间不存在交互。例如,虽然不能在包含读锁定的行上获取写锁定,但可以在只具有幻像锁的行上获取写锁定。这种灵活的安排为数据库服务器提供了更多选择,但这也意味着服务器必须经常注意在获取幻像锁的同时也应获取读锁定。否则,其它事务可以删除该行。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |