DB2 Lock
锁状态(模式) | 适用对象 | 描述 |
---|---|---|
意向无(Intent None,IN) | 表空间和表 | 锁的拥有者可以读取被锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级锁;因此,其他并发应用程序可以读取和更改表中的数据。 |
意向共享(Intent Share,IS) | 表空间和表 | 锁的拥有者可以读取被锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级锁;所以,其他并发的应用程序可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务没有表达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句表达更新的意图。) |
下一键共享(Next Key Share,NS) | 行 | 锁拥有者和所有并发的事务都可以读(但不能更改)被锁定行中的数据。这种锁用来在使用读稳定性或游标稳定性事务隔离级别读取的数据上代替共享锁。 |
共享(Share,S) | 表和行 | 锁拥有者和任何其他并发的事务都可以读(但不能更改)被锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级的共享锁。如果表或行是用共享锁锁定的,则其他并发事务可以读取数据,但不能对它进行更改。 |
意向互斥(Intent Exclusive,IX) | 表空间和表 | 锁拥有者和任何其他并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表中读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新锁和互斥锁。其他并发的应用程序可以读取和更新被锁定的表。当事务表达更新表中行的意图时,就获取这种锁。 |
带意向互斥的共享(Share With Intent Exclusive,SIX) | 表 | 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不在它读取的行上获取锁;因此,其他并发的应用程序可以读取但不能更新被锁定表中的数据。 |
更新(Update,U) | 表和行 | 锁的拥有者可以更新被锁定表中的数据,而且锁的拥有者在它所更新的任何行上自动获得互斥锁。其他并发的应用程序可以读取但不能更新被锁定表中的数据。 |
下一键弱互斥(Next Key Weak Exclusive,NW) | 行 | 锁的拥有者可以读取但不能更新被锁定的行。当在非编目表的索引中插入行时,在表中的下一行上获得这种锁。 |
互斥(Exclusive,X) | 表和行 | 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用未提交的读隔离级别的应用程序访问被锁定的表或行。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。 |
弱互斥(Weak Exclusive,WE) | 行 | 锁的拥有者可以读取和更改被锁定的行。当向非编目表中插入行时,该行上将获得这种锁。 |
超级互斥(Super Exclusive,Z) | 表空间和表 | 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在释放这个锁之前,不允许其他并发事务读取或更新该表。 |
当数据库运行缓慢时,查询锁状况:
select * from table (snapshot_lock('<dbname>', -1)) as snap_info;
查看数据库锁snapshot:
1. update monitor switchs using lock on;
2. get snapshot for locks on <dbname>;
手工给表上锁:
select * from <table_name> with rs for update;
手工解锁:
db2 list application
db2 force application(<application handle>)
Comments
Post a Comment