天地不仁,以万物为刍狗!
DB2锁介绍[转]
上一篇 / 下一篇 2007-11-08 00:00:00 / 个人分类:db2
1 DB2 多粒度封锁机制介绍ITPUB个人空间jB o`,M0lbvO
1.1 锁的对象ITPUB个人空间k9_#K.] _
DB2支持对表空间、表、行和索引加锁(大型机上的数据库还可以支持对数据页加锁)来保证数据库的并发完整性。不过在考虑用户应用程序的并发性的问题上,通常并不检查用于表空间和索引的锁。该类问题分析的焦点在于表锁和行锁。ITPUB个人空间.^AT(q]7[/Y
1.2 锁的策略
"yUs,@^I-wu0DB2可以只对表进行加锁,也可以对表和表中的行进行加锁。如果只对表进行加锁,则表中所有的行都受到同等程度的影响。如果加锁的范围针对于表及下属的行,则在对表加锁后,相应的数据行上还要加锁。究竟应用程序是对表加行锁还是同时加表锁和行锁,是由应用程序执行的命令和系统的隔离级别确定。
P1~O:W;G ~1ewA)`01.2.1 DB2表锁的模式ITPUB个人空间 bS\T0ZwY[8?
DB2在表一级加锁可以使用以下加锁方式:ITPUB个人空间6F YOZoJ%sl/Y+W
名称缩写 全名 描述ITPUB个人空间R4o1\G9LnA!E!C
IN 无意图锁 (Intenet None)
,[%{9OY-r3q"EV0不需要行锁 该锁的拥有者可以读表中的任何数据,包括其他事务尚未提交的数据,但不能对表中的数据进行更改。
*Fj~ M1V0T&~4y5n0IS 意图共享锁(Intent Share)需要行锁配合 该锁的拥有者在拥有相应行的上的S锁时可以读取该行的数据。但不能对表中的数据进行更改。ITPUB个人空间%W.iys,Eg1B Q
IX 意图排它锁(Intent eXclusive)需要行锁配合 该锁的拥有者在拥有相应行的X锁时可以更改该行的数据。ITPUB个人空间&Y%\`ED
SIX 共享携意图排它锁
8N me8W)FZ0(Share with Intent exclusive)需要行锁配合 锁的拥有者可以读表中的任何数据,如果在相应的行上能够获得X锁,则可以修改该行。SIX锁的获得比较特殊,它是在应用程序已经拥有IX锁的情况下请求S锁或者是在应用程序已经拥有S锁的情况下请求IX锁时生成的。ITPUB个人空间"w'OG~_
S 共享锁(Share)不需要行锁配合 锁的拥有者可以读表中的任何数据,如果表上被加上S锁,该表中的数据就只能被读取,不能被改变。ITPUB个人空间^m&SO5c}zu
U 更新锁(Update)ITPUB个人空间 J)lCCw m[
不需要行锁配合 锁的拥有者可以读表中的任何数据,如果在升级到X锁之后,可以更改表中的任何数据。该锁是处于等待对数据进行更改的一种中间状态。ITPUB个人空间4_o9AQ S6i
X 排它锁ITPUB个人空间_l3n"hCGT
(eXclusive)ITPUB个人空间6Q;S r B;l{g Zp
不需要行锁配合 锁的拥有者可以读取或更改表中的任何数据。如果对表加上X锁,除了未提交读程序,其他应用程序都不能对该表进行存取。ITPUB个人空间7{"F(xKQf M;I
Z 超级排它锁ITPUB个人空间^!dj1Ar0@3A*K1G
(Super Exclusive)ITPUB个人空间dqPYC Nf3IG
不需要行锁配合 该锁不是通过应用程序中的DML语言来生成的。一般是通过对表进行删除(Drop)和转换(Alter)操作或创建和删除索引而获得的。如果对表上加上Z锁,其他应用程序,包括未提交读程序都不能对该表进行存取。ITPUB个人空间 i gx"M;[ T{5`*P
表三:DB2数据库表锁的模式
ufq:B6?-L0下面对几种表锁的模式进一步加以阐述:ITPUB个人空间U8@&aChE
IS、IX、SIX方式用于表一级并需要行锁配合,他们可以阻止其他应用程序对该表加上排它锁。ITPUB个人空间M(Rz;L(m!g U:y
如果一个应用程序获得某表的IS锁,该应用程序可获得某一行上的S锁,用于只读操作,同时其他应用程序也可以读取该行,或是对表中的其他行进行更改。ITPUB个人空间6@\+\u"~D
如果一个应用程序获得某表的IX锁,该应用程序可获得某一行上的X锁,用于更改操作,同时其他应用程序可以读取或更改表中的其他行。
(luGNU2s|K v9yQ+]0 如果一个应用程序获得某表的SIX锁,该应用程序可以获得某一行上的X锁,用于更改操作,同时其他应用程序只能对表中其他行进行只读操作。ITPUB个人空间#[ C @$M&{kO:Y+O\
S、U、X和Z方式用于表一级,但并不需要行锁配合,是比较严格的表加锁策略。ITPUB个人空间-SwD8E8J"i-~
如果一个应用程序得到某表的S锁。该应用程序可以读表中的任何数据。同时它允许其他应用程序获得该表上的只读请求锁。如果有应用程序需要更改读该表上的数据,必须等S锁被释放。ITPUB个人空间U(}HYtg
如果一个应用程序得到某表的U锁,该应用程序可以读表中的任何数据,并最终可以通过获得表上的X锁来得到对表中任何数据的修改权。其他应用程序只能读取该表中的数据。U锁与S锁的区别主要在于更改的意图上。U锁的设计主要是为了避免两个应用程序在拥有S锁的情况下同时申请X锁而造成死锁的。ITPUB个人空间rn2j!N|){
如果一个应用程序得到某表上的X锁,该应用程序可以读或修改表中的任何数据。其他应用程序不能对该表进行读或者更改操作。ITPUB个人空间l7g ^4\ tx3[#G
如果一个应用程序得到某表上的Z锁,该应用程序可以读或修改表中的任何数据。其他应用程序,包括未提交读程序都不能对该表进行读或者更改操作。
*B/FD0Xl9] o*Z0IN锁用于表上以允许未提交读这一概念。
;|8~DeeK9wkt7A01.2.2 DB2行锁的模式ITPUB个人空间A(nV9[#c/de
除了表锁之外,DB2还支持以下几种方式的行锁。
dqk]N l0名称缩写 全名 需要表锁的最低级别 描述ITPUB个人空间#RUR5j,KQV+i]o
S 共享锁ITPUB个人空间qi#UID%r(LQqnO
(Share) IS 该行正在被某个应用程序读取,其他应用程序只能对该行进行读操作。
1ZU9~9a!D?"PT0U 更改锁
!Au1Ib'f6Lvgh9o0(Update) IX 某个应用程序正在读该行并有可能更改该行,其他应用程序只能读该行。ITPUB个人空间 C],TzQ^`L
X 排它锁ITPUB个人空间d j@@D+iC^e
(eXclusive) IX 该行正在被某个应用程序更改,其他应用程序不能访问该行。
4`/HD{-Gm[0W 弱排它锁ITPUB个人空间 FVu1TaQ;g
(Weak eXclusive) IX 当一行数据被插入表中的时候,该行上会被加上W锁。锁的拥有者能够更改该行,该锁基本与X锁相同,除了它与NW锁兼容。
$\D@nX!Mb0NS 下一键共享锁ITPUB个人空间~7Uq} P n#BJ
(Next Key Share) IS 锁的拥有者和其他程序都可以读该行,但不能对该行进行更改。当应用程序处于RS或CS隔离级下,该锁用来替代S锁。
f2i2C!W aI)|0NX 下一键排它锁
GhA8C7?C0(Next Key eXclusive) IX 当一行数据被插入到索引中或从索引中被删除的时候,该行的下一行上会被加上该锁。锁的拥有者可以读,但不能更改锁定行。该锁与X锁类似,只是与NS锁兼容。
F$yIf B(Cw!k0NW 下一键弱排它锁ITPUB个人空间WP`_Ni
(Next Key Weak eXclusive) IX 当一行被插入到索引中的时候,该行的下一行会被加上该锁。锁的拥有者可以读但不能更改锁定行。该锁与X和NX锁类似,只是与W和NS锁兼容。
8wf4fAT y0表四:DB2数据库行锁的模式ITPUB个人空间3b"z{ KP/}tZfvD
DB2锁的兼容性
2obt5M4_c&?0ITPUB个人空间Oo'u9s&im \5I
锁A的模式 锁B的模式ITPUB个人空间DIOs0~*U6TV
IN IS S IX SIX U X Z
N x;_Oy"v2r0IN Y Y Y Y Y Y Y N
6|5sjf+[$d@7d&B0IS Y Y Y Y Y Y N NITPUB个人空间vv+Yj9Ac%B
S Y Y Y N N Y N N
1k T5`-p NZ$CnL0IX Y Y N Y N N N NITPUB个人空间R0b4DV8QEWQ
SIX Y Y N N N N N NITPUB个人空间3d|BB2v \ aFL;l)wL
U Y Y Y N N N N N
B5|h*u2y&aoA0X Y N N N N N N N
`Do~-O0Z N N N N N N N N
@5@s%Xq X0表五:DB2数据库表锁的相容矩阵ITPUB个人空间%H Y/pA1G9n2S
锁A的模式 锁B的模式ITPUB个人空间/K2zYv)y1tC
S U X W NS NX NW
L#qj*I/f0S Y Y N N Y N NITPUB个人空间}`0_V\qd'Bf
U Y N N N Y N NITPUB个人空间(R{z3K F0?B~&w
X N N N N N N N
4u:?8gMSu8Fw0W N N N N N N YITPUB个人空间Y!ZG7e~2M)gP
NS Y Y N N Y Y YITPUB个人空间$]Ez9c(i2M
NX N N N N Y N NITPUB个人空间-U.@ek#AJ@5a!u]S
NW N N N Y Y N NITPUB个人空间$L!N5D P']w'l5m]
表六:DB2数据库行锁的相容矩阵
%KWV GP,X0下表是笔者总结了DB2中各SQL语句产生表锁的情况(假设缺省的隔离级别为CS):
&hO6v @9?0SQL语句 行锁ITPUB个人空间;J6hZ5KI)`$Aa
模式 表锁
)MA|!{zT!x0模式 允许的锁模式
-|(U%^&D N*W"`%Hf^0Select * from table_name for read only with rr.. 无 S IN,IS,S,UITPUB个人空间iQ@?/]uGc
Select * from table_name for read only with rs.. NS IS IN,IS,S,SIX,UITPUB个人空间jS1t6xP|-h5u@
Select * from table_name for read only with cs.. 无 无 ITPUB个人空间9zoa#]$i E&O
Select * from table_name for read only with ur.. 无 无 ITPUB个人空间W]1e2V1Z.q r3j4I
Select * from table_name for update with rr 无 U IN,IS,S
.xrug} b0Select * from table_name for update with rs U IX IN,IS,IXITPUB个人空间Sg g%@nS+[e.|3b
Select * from table_name for update with cs U IX IN,IS,IX
a&V.V4qp!^0Select * from table_name for update with ur U IX IN,IS,IXITPUB个人空间 Mc2O.qYr|a
Insert into table_name…… W IX IN,IS,IX
F[T!Q1doBq9L0Update table_name…… X IX IN,IS,IXITPUB个人空间+p,K!Vvj#y'q2OWd
Delete from table_name…… X IX IN,IS,IX
7VM;D/e AvgIs"cj S0lock table table_name in share mode 无 S IN,IS,S,UITPUB个人空间*h[(PXq4r&B
lock table table_name in exclusive mode 无 X IN
DOTYK[K-l0Alter table t1 add column id int Z
tQU5cK:H!hHF0Drop table t1 X Z ITPUB个人空间5@5u)Q.Fe2]d3t
Create table t1(id int) Z
%U-LbU` G0注:alter,create,drop会在syscolumns,systables,systablespaces,sysuserath等数据字典系统表中加行级锁。
{T#g9rqk-W.@U#J01.3 DB2锁的升级
Ls\nM;I;\0gr0每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级的功能。锁升级是通过对表加上非意图性的表锁,同时释放行锁来减少锁的数目,从而达到减少锁需要的内存开销的目的。锁升级是由数据库管理器自动完成的,有两个数据库的配置参数直接影响锁升级的处理:ITPUB个人空间Z(teZu.L1|2L
locklist—在一个数据库全局内存中用于锁存储的内存。单位为页(4K)。ITPUB个人空间 v0C`x3{9A
maxlocks—一个应用程序允许得到的锁占用的内存所占locklist大小的百分比。ITPUB个人空间6CD4tA?J&r
锁升级会在这两种情况下被触发:
XL2?6VV K@0 某个应用程序请求的锁所占用的内存空间超出了maxlocks与locklist的乘积大小。这时,数据库管理器将试图通过为提出锁请求的应用程序申请表锁,并释放行锁来节省空间。
%X9V\y+J%po1K0 在一个数据库中已被加上的全部锁所占的内存空间超出了locklist定义的大小。这时,数据库管理器也将试图通过为提出锁请求的应用程序申请表锁,并释放行锁来节省空间。
x!d Y4ON&KV;b0锁升级是有可能会失败的,比如,现在一个应用程序已经在一个表上加有IX锁,表中的某些行上加有X锁,另一个应用程序又来请求表上的IS锁,以及很多行上的S锁,由于申请的锁数目过多引起锁的升级。数据库管理器试图为该应用程序申请表上的S锁来减少所需要的锁的数目,但S锁与表上原有的IX锁冲突,锁升级不能成功。ITPUB个人空间Z F ww"Y:k o
如果锁升级失败,引起锁升级的应用程序将接到一个-912的SQLCODE。
ITPUB个人空间cCI%\&QK uj1.1 锁的对象ITPUB个人空间k9_#K.] _
DB2支持对表空间、表、行和索引加锁(大型机上的数据库还可以支持对数据页加锁)来保证数据库的并发完整性。不过在考虑用户应用程序的并发性的问题上,通常并不检查用于表空间和索引的锁。该类问题分析的焦点在于表锁和行锁。ITPUB个人空间.^AT(q]7[/Y
1.2 锁的策略
"yUs,@^I-wu0DB2可以只对表进行加锁,也可以对表和表中的行进行加锁。如果只对表进行加锁,则表中所有的行都受到同等程度的影响。如果加锁的范围针对于表及下属的行,则在对表加锁后,相应的数据行上还要加锁。究竟应用程序是对表加行锁还是同时加表锁和行锁,是由应用程序执行的命令和系统的隔离级别确定。
P1~O:W;G ~1ewA)`01.2.1 DB2表锁的模式ITPUB个人空间 bS\T0ZwY[8?
DB2在表一级加锁可以使用以下加锁方式:ITPUB个人空间6F YOZoJ%sl/Y+W
名称缩写 全名 描述ITPUB个人空间R4o1\G9LnA!E!C
IN 无意图锁 (Intenet None)
,[%{9OY-r3q"EV0不需要行锁 该锁的拥有者可以读表中的任何数据,包括其他事务尚未提交的数据,但不能对表中的数据进行更改。
*Fj~ M1V0T&~4y5n0IS 意图共享锁(Intent Share)需要行锁配合 该锁的拥有者在拥有相应行的上的S锁时可以读取该行的数据。但不能对表中的数据进行更改。ITPUB个人空间%W.iys,Eg1B Q
IX 意图排它锁(Intent eXclusive)需要行锁配合 该锁的拥有者在拥有相应行的X锁时可以更改该行的数据。ITPUB个人空间&Y%\`ED
SIX 共享携意图排它锁
8N me8W)FZ0(Share with Intent exclusive)需要行锁配合 锁的拥有者可以读表中的任何数据,如果在相应的行上能够获得X锁,则可以修改该行。SIX锁的获得比较特殊,它是在应用程序已经拥有IX锁的情况下请求S锁或者是在应用程序已经拥有S锁的情况下请求IX锁时生成的。ITPUB个人空间"w'OG~_
S 共享锁(Share)不需要行锁配合 锁的拥有者可以读表中的任何数据,如果表上被加上S锁,该表中的数据就只能被读取,不能被改变。ITPUB个人空间^m&SO5c}zu
U 更新锁(Update)ITPUB个人空间 J)lCCw m[
不需要行锁配合 锁的拥有者可以读表中的任何数据,如果在升级到X锁之后,可以更改表中的任何数据。该锁是处于等待对数据进行更改的一种中间状态。ITPUB个人空间4_o9AQ S6i
X 排它锁ITPUB个人空间_l3n"hCGT
(eXclusive)ITPUB个人空间6Q;S r B;l{g Zp
不需要行锁配合 锁的拥有者可以读取或更改表中的任何数据。如果对表加上X锁,除了未提交读程序,其他应用程序都不能对该表进行存取。ITPUB个人空间7{"F(xKQf M;I
Z 超级排它锁ITPUB个人空间^!dj1Ar0@3A*K1G
(Super Exclusive)ITPUB个人空间dqPYC Nf3IG
不需要行锁配合 该锁不是通过应用程序中的DML语言来生成的。一般是通过对表进行删除(Drop)和转换(Alter)操作或创建和删除索引而获得的。如果对表上加上Z锁,其他应用程序,包括未提交读程序都不能对该表进行存取。ITPUB个人空间 i gx"M;[ T{5`*P
表三:DB2数据库表锁的模式
ufq:B6?-L0下面对几种表锁的模式进一步加以阐述:ITPUB个人空间U8@&aChE
IS、IX、SIX方式用于表一级并需要行锁配合,他们可以阻止其他应用程序对该表加上排它锁。ITPUB个人空间M(Rz;L(m!g U:y
如果一个应用程序获得某表的IS锁,该应用程序可获得某一行上的S锁,用于只读操作,同时其他应用程序也可以读取该行,或是对表中的其他行进行更改。ITPUB个人空间6@\+\u"~D
如果一个应用程序获得某表的IX锁,该应用程序可获得某一行上的X锁,用于更改操作,同时其他应用程序可以读取或更改表中的其他行。
(luGNU2s|K v9yQ+]0 如果一个应用程序获得某表的SIX锁,该应用程序可以获得某一行上的X锁,用于更改操作,同时其他应用程序只能对表中其他行进行只读操作。ITPUB个人空间#[ C @$M&{kO:Y+O\
S、U、X和Z方式用于表一级,但并不需要行锁配合,是比较严格的表加锁策略。ITPUB个人空间-SwD8E8J"i-~
如果一个应用程序得到某表的S锁。该应用程序可以读表中的任何数据。同时它允许其他应用程序获得该表上的只读请求锁。如果有应用程序需要更改读该表上的数据,必须等S锁被释放。ITPUB个人空间U(}HYtg
如果一个应用程序得到某表的U锁,该应用程序可以读表中的任何数据,并最终可以通过获得表上的X锁来得到对表中任何数据的修改权。其他应用程序只能读取该表中的数据。U锁与S锁的区别主要在于更改的意图上。U锁的设计主要是为了避免两个应用程序在拥有S锁的情况下同时申请X锁而造成死锁的。ITPUB个人空间rn2j!N|){
如果一个应用程序得到某表上的X锁,该应用程序可以读或修改表中的任何数据。其他应用程序不能对该表进行读或者更改操作。ITPUB个人空间l7g ^4\ tx3[#G
如果一个应用程序得到某表上的Z锁,该应用程序可以读或修改表中的任何数据。其他应用程序,包括未提交读程序都不能对该表进行读或者更改操作。
*B/FD0Xl9] o*Z0IN锁用于表上以允许未提交读这一概念。
;|8~DeeK9wkt7A01.2.2 DB2行锁的模式ITPUB个人空间A(nV9[#c/de
除了表锁之外,DB2还支持以下几种方式的行锁。
dqk]N l0名称缩写 全名 需要表锁的最低级别 描述ITPUB个人空间#RUR5j,KQV+i]o
S 共享锁ITPUB个人空间qi#UID%r(LQqnO
(Share) IS 该行正在被某个应用程序读取,其他应用程序只能对该行进行读操作。
1ZU9~9a!D?"PT0U 更改锁
!Au1Ib'f6Lvgh9o0(Update) IX 某个应用程序正在读该行并有可能更改该行,其他应用程序只能读该行。ITPUB个人空间 C],TzQ^`L
X 排它锁ITPUB个人空间d j@@D+iC^e
(eXclusive) IX 该行正在被某个应用程序更改,其他应用程序不能访问该行。
4`/HD{-Gm[0W 弱排它锁ITPUB个人空间 FVu1TaQ;g
(Weak eXclusive) IX 当一行数据被插入表中的时候,该行上会被加上W锁。锁的拥有者能够更改该行,该锁基本与X锁相同,除了它与NW锁兼容。
$\D@nX!Mb0NS 下一键共享锁ITPUB个人空间~7Uq} P n#BJ
(Next Key Share) IS 锁的拥有者和其他程序都可以读该行,但不能对该行进行更改。当应用程序处于RS或CS隔离级下,该锁用来替代S锁。
f2i2C!W aI)|0NX 下一键排它锁
GhA8C7?C0(Next Key eXclusive) IX 当一行数据被插入到索引中或从索引中被删除的时候,该行的下一行上会被加上该锁。锁的拥有者可以读,但不能更改锁定行。该锁与X锁类似,只是与NS锁兼容。
F$yIf B(Cw!k0NW 下一键弱排它锁ITPUB个人空间WP`_Ni
(Next Key Weak eXclusive) IX 当一行被插入到索引中的时候,该行的下一行会被加上该锁。锁的拥有者可以读但不能更改锁定行。该锁与X和NX锁类似,只是与W和NS锁兼容。
8wf4fAT y0表四:DB2数据库行锁的模式ITPUB个人空间3b"z{ KP/}tZfvD
DB2锁的兼容性
2obt5M4_c&?0ITPUB个人空间Oo'u9s&im \5I
锁A的模式 锁B的模式ITPUB个人空间DIOs0~*U6TV
IN IS S IX SIX U X Z
N x;_Oy"v2r0IN Y Y Y Y Y Y Y N
6|5sjf+[$d@7d&B0IS Y Y Y Y Y Y N NITPUB个人空间vv+Yj9Ac%B
S Y Y Y N N Y N N
1k T5`-p NZ$CnL0IX Y Y N Y N N N NITPUB个人空间R0b4DV8QEWQ
SIX Y Y N N N N N NITPUB个人空间3d|BB2v \ aFL;l)wL
U Y Y Y N N N N N
B5|h*u2y&aoA0X Y N N N N N N N
`Do~-O0Z N N N N N N N N
@5@s%Xq X0表五:DB2数据库表锁的相容矩阵ITPUB个人空间%H Y/pA1G9n2S
锁A的模式 锁B的模式ITPUB个人空间/K2zYv)y1tC
S U X W NS NX NW
L#qj*I/f0S Y Y N N Y N NITPUB个人空间}`0_V\qd'Bf
U Y N N N Y N NITPUB个人空间(R{z3K F0?B~&w
X N N N N N N N
4u:?8gMSu8Fw0W N N N N N N YITPUB个人空间Y!ZG7e~2M)gP
NS Y Y N N Y Y YITPUB个人空间$]Ez9c(i2M
NX N N N N Y N NITPUB个人空间-U.@ek#AJ@5a!u]S
NW N N N Y Y N NITPUB个人空间$L!N5D P']w'l5m]
表六:DB2数据库行锁的相容矩阵
%KWV GP,X0下表是笔者总结了DB2中各SQL语句产生表锁的情况(假设缺省的隔离级别为CS):
&hO6v @9?0SQL语句 行锁ITPUB个人空间;J6hZ5KI)`$Aa
模式 表锁
)MA|!{zT!x0模式 允许的锁模式
-|(U%^&D N*W"`%Hf^0Select * from table_name for read only with rr.. 无 S IN,IS,S,UITPUB个人空间iQ@?/]uGc
Select * from table_name for read only with rs.. NS IS IN,IS,S,SIX,UITPUB个人空间jS1t6xP|-h5u@
Select * from table_name for read only with cs.. 无 无 ITPUB个人空间9zoa#]$i E&O
Select * from table_name for read only with ur.. 无 无 ITPUB个人空间W]1e2V1Z.q r3j4I
Select * from table_name for update with rr 无 U IN,IS,S
.xrug} b0Select * from table_name for update with rs U IX IN,IS,IXITPUB个人空间Sg g%@nS+[e.|3b
Select * from table_name for update with cs U IX IN,IS,IX
a&V.V4qp!^0Select * from table_name for update with ur U IX IN,IS,IXITPUB个人空间 Mc2O.qYr|a
Insert into table_name…… W IX IN,IS,IX
F[T!Q1doBq9L0Update table_name…… X IX IN,IS,IXITPUB个人空间+p,K!Vvj#y'q2OWd
Delete from table_name…… X IX IN,IS,IX
7VM;D/e AvgIs"cj S0lock table table_name in share mode 无 S IN,IS,S,UITPUB个人空间*h[(PXq4r&B
lock table table_name in exclusive mode 无 X IN
DOTYK[K-l0Alter table t1 add column id int Z
tQU5cK:H!hHF0Drop table t1 X Z ITPUB个人空间5@5u)Q.Fe2]d3t
Create table t1(id int) Z
%U-LbU` G0注:alter,create,drop会在syscolumns,systables,systablespaces,sysuserath等数据字典系统表中加行级锁。
{T#g9rqk-W.@U#J01.3 DB2锁的升级
Ls\nM;I;\0gr0每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级的功能。锁升级是通过对表加上非意图性的表锁,同时释放行锁来减少锁的数目,从而达到减少锁需要的内存开销的目的。锁升级是由数据库管理器自动完成的,有两个数据库的配置参数直接影响锁升级的处理:ITPUB个人空间Z(teZu.L1|2L
locklist—在一个数据库全局内存中用于锁存储的内存。单位为页(4K)。ITPUB个人空间 v0C`x3{9A
maxlocks—一个应用程序允许得到的锁占用的内存所占locklist大小的百分比。ITPUB个人空间6CD4tA?J&r
锁升级会在这两种情况下被触发:
XL2?6VV K@0 某个应用程序请求的锁所占用的内存空间超出了maxlocks与locklist的乘积大小。这时,数据库管理器将试图通过为提出锁请求的应用程序申请表锁,并释放行锁来节省空间。
%X9V\y+J%po1K0 在一个数据库中已被加上的全部锁所占的内存空间超出了locklist定义的大小。这时,数据库管理器也将试图通过为提出锁请求的应用程序申请表锁,并释放行锁来节省空间。
x!d Y4ON&KV;b0锁升级是有可能会失败的,比如,现在一个应用程序已经在一个表上加有IX锁,表中的某些行上加有X锁,另一个应用程序又来请求表上的IS锁,以及很多行上的S锁,由于申请的锁数目过多引起锁的升级。数据库管理器试图为该应用程序申请表上的S锁来减少所需要的锁的数目,但S锁与表上原有的IX锁冲突,锁升级不能成功。ITPUB个人空间Z F ww"Y:k o
如果锁升级失败,引起锁升级的应用程序将接到一个-912的SQLCODE。
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG:
标题搜索
日历
|
|||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | |||||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | |||
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | |||
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | |||
| 30 | |||||||||
我的存档
数据统计
- 访问量: 12244
- 日志数: 273
- 图片数: 1
- 文件数: 2
- 建立时间: 2007-12-01
- 更新时间: 2008-11-19


