Chinaunix

标题: 关于 Informix 的锁. [打印本页]

作者: WC_CUN    时间: 2004-08-27 12:37
标题: 关于 Informix 的锁.
Informix 的锁有几种呢?
最近与人讨论这个问题,我个人认为是两种.
作者: zzjijun    时间: 2004-08-27 13:07
标题: 关于 Informix 的锁.
从锁的范围说有row lock和page lock,有些操作是锁整张表,有些是锁整个数据库。
从锁的种类来说多了:SHARED锁,EXCLUSIVE锁,PROMOTABLE锁。
精华区有篇《Informix數據庫的鎖技術》

个人觉得锁的设计原理各个数据库大同小异,最好看看有关数据库原理设计的书。
作者: WC_CUN    时间: 2004-08-27 13:44
标题: 关于 Informix 的锁.
原帖由 "zzjijun" 发表:
从锁的范围说有row lock和page lock,有些操作是锁整张表,有些是锁整个数据库。
从锁的种类来说多了:SHARED锁,EXCLUSIVE锁,PROMOTABLE锁。
精华区有篇《Informix數據庫的鎖技術》

个人觉得锁的设计原理各个..........

我认为锁的级别与锁的种类是不同的,而种类只有共享和排它之分.
作者: zzjijun    时间: 2004-08-27 14:04
标题: 关于 Informix 的锁.
要讨论这个问题先把你的“锁的种类”给个定义。

我摘录一段锁的属性的论述吧:
“所有的锁都有下列基本属性:
Object:object 属性标识了要锁定的数据资源。
Size:size 属性指定要锁定的数据资源部分的物理大小。锁并不总是必须控制整个数据资源。
Duration:duration 属性指定了锁被持有的时间长度。事务的隔离级别通常控制了锁的持续时间。
Mode:mode 属性指定了锁的拥有者所允许的访问类型,以及对锁定数据资源的并发用户许可的访问类型。这个属性通常称为锁状态。 ”

在锁问题里还要考虑锁兼容性、锁转换、锁升级。这样就需要有意向锁,PROMOTABLE锁。
作者: WC_CUN    时间: 2004-08-27 14:39
标题: 关于 Informix 的锁.
原帖由 "zzjijun" 发表:
要讨论这个问题先把你的“锁的种类”给个定义。

我摘录一段锁的属性的论述吧:
“所有的锁都有下列基本属性:
Object:object 属性标识了要锁定的数据资源。
Size:size 属性指定要锁定的数据资源部分的物理大..........

锁的种类即lock types.而级别则是 lock levels.
作者: zzjijun    时间: 2004-08-27 16:20
标题: 关于 Informix 的锁.
在《Simplified Chinese IBM Informix Guide to SQL- Syntax, Version 9.4 (G152-0558-00)》中:
Informix支持3种锁的种类:
共享
互斥
可提升/更新
作者: WC_CUN    时间: 2004-08-27 17:03
标题: 关于 Informix 的锁.
原帖由 "zzjijun" 发表:
在《Simplified Chinese IBM Informix Guide to SQL- Syntax, Version 9.4 (G152-0558-00)》中:
Informix支持3种锁的种类:
共享
互斥
可提升/更新

promotable lock
首先,并非全线支持。另外,它不过是在不同的过程扮演不同的角色而已。
作者: zzjijun    时间: 2004-08-27 17:26
标题: 关于 Informix 的锁.
------摘录-----
锁兼容性
如果数据资源上的一种锁状态允许在同一资源上放置另一个锁,就认为这两种锁(或两种状态)是兼容的。每当一个事务持有数据资源上的锁,而第二个事务请求同一资源上的锁时,数据库管理器检查两种锁状态以确定它们是否兼容。如果锁是兼容的,则将锁授予第二个事务(假定没有其它事务在等待该数据资源)。但是,如果锁不兼容,则第二个事务必须等待,直到第一个事务释放它的锁为止,然后才可以获取对资源的访问权并继续处理。


锁转换
当事务尝试访问它已经持有锁的数据资源,并且所需的访问模式需要比已持有的锁更严格的锁时,则所持有的锁的状态更改成更严格的状态。
作者: zzjijun    时间: 2004-08-27 17:27
标题: 关于 Informix 的锁.
也许你认为划分锁种类条件只包含对锁对访问对象的控制。但如果按你的分类无法正确描述Informix中锁兼容和锁转换的问题。可见在Informix中锁种类划分的条件要多一些因素。

举个例子照你的分类描述Informix的锁兼容用一张2*2的表,如下
--------共享   互斥
共享
互斥


而实际上至少应该是3*3的表,如下
---------共享    可提升    互斥
共享
可提升
互斥
作者: zzjijun    时间: 2004-08-27 17:28
标题: 关于 Informix 的锁.
照你这样说共享锁和互斥锁也是“不过是在不同的过程扮演不同的角色而已”。

不明白你说的并非全线支持是什么意思,7版本和9版本在锁种类上没有什么变化。7版本的文档可以参见《Guide to SQL: Tutorial, December 1999》

讨论问题一定要遵循统一的定义和约定。你可以给出你认为的锁种类的定义。既然用了Informix产品,Informix产品中锁种类说明就应该以informix官方文档为标准。
作者: WC_CUN    时间: 2004-08-27 19:36
标题: 关于 Informix 的锁.
原帖由 "zzjijun" 发表:
照你这样说共享锁和互斥锁也是“不过是在不同的过程扮演不同的角色而已”。

不明白你说的并非全线支持是什么意思,7版本和9版本在锁种类上没有什么变化。7版本的文档可以参见《Guide to SQL: Tutorial, December ..........

多谢您的回复,一下子这么多,不知到该回哪个.
promotable lock 是在 update ready 之前后进行类型转换.所以依然是共享或是排它.
作者: WC_CUN    时间: 2004-08-27 19:45
标题: 关于 Informix 的锁.
原帖由 "zzjijun" 发表:
照你这样说共享锁和互斥锁也是“不过是在不同的过程扮演不同的角色而已”。

不明白你说的并非全线支持是什么意思,7版本和9版本在锁种类上没有什么变化。7版本的文档可以参见《Guide to SQL: Tutorial, December ..........

全线是指 SE online universal 等.
作者: 甜豆儿    时间: 2004-08-29 08:56
标题: 关于 Informix 的锁.
如果数据资源上的一种锁状态允许在同一资源上放置另一个锁,就认为这两种锁(或两种状态)是兼容的。
作者: wxhinformix    时间: 2004-09-01 08:32
标题: 关于 Informix 的锁.
锁范围指锁影响的数据量。
范围有:
1)数据库:可以独占(dbexport与onunload等),也可以共享
2)表:表的锁定也可以有独占(alter table,create index,rename column)与共享锁;
3)页与行:可以在create index,alter table语句指定“锁方式”,“lock mode page"锁定这个页,"lock mode row"锁定特定行;
dbschema -d database -t tablename -ss查看表的当前锁方式;
4)索引关键字:增加或删除索引时候发生;后台完成;

类型有:
共享锁:是对象的只读锁,允许读对象,任何人不能在存在共享锁时更新对象(即取得独占锁);lock table xxx in share mode;
独占锁:独占模式,存在独占锁时候,不能采用任何其他锁;
可升级锁:是共享锁和独占锁的混合体,只适用于行和页;用户在取得共享锁后,如果要更新行时,升级为独占锁;(游标)
作者: zzjijun    时间: 2004-09-01 23:30
标题: 关于 Informix 的锁.
1、我手头只有IDS7和9版本的资料,不能断定SE、Online、Universal的锁类型是什么样的。不过SE、Online、Universal之间的差别就不用我说了吧,如果按照你的逻辑一个功能要所有版本都具有的话才能算Informix具有,那干脆Informix都不用升级了,升级了别人也不认呀--“谁让你不一开始就实现所有功能,你这叫非全线支持!”。退一步,根据资料我可以严谨的说在Informix V7.x 和 V9.x中有3种类型的锁。
2、我已经反复强调事务的分类要依据一定的定义和约定。举个例子:人按年龄分为童年、少年、青年、中年、老年,可是人都是要变老的,也可以分为非老年人,老年人,但你要描述一个小孩和一个青年的区别时一个“非老年”就不够了吧。所以很多情况下分类的粒度太大不能满足我们描述问题的需要。promotable lock不论在什么时候转换,转换前还总是它自己吧。
3、楼主并没有给出你为锁类型分类的定义,你划分的共享或是排它锁并不能完整的、正确的描述Informix中锁兼容和锁转换的问题。如果在Informix的认证考试中有锁类型的题目,答案一定是3种。
4、在DB2、Oracle中锁类型都多于3种,应该可以从中悟出点什么吧。
5、这个贴应该一起讨论有关数据库并发处理、锁的相关知识,现在到有点象在抬杠。其实Informix有几种锁类型并不重要,重要的是思考问题的方式。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2