Chinaunix首页 | 论坛 | 博客
  • 博客访问: 425116
  • 博文数量: 239
  • 博客积分: 8010
  • 博客等级: 中将
  • 技术积分: 2431
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-02 21:12
文章分类
文章存档

2008年(239)

我的朋友

分类: DB2/Informix

2008-06-17 23:15:25

数据库系统

INFORMIX系统采用锁机制作为其并发控制机制。配置参数LOCKS,设定系统初始锁的数目。如果被要求的锁数目超过此参数设置,系统就自动加倍该参数设置,使系统可以使用的锁数目增加一倍。在连续加倍15次之后,如果锁的数目仍旧不足,系统就会报错。

 

1. 锁的类型

 

除了共享锁、排它锁、意图锁、更新锁之外,INFORMIX系统引入了字节锁(byte lock)、字节范围锁(byte-range lock)。对可变长字符(varchar)类型字段的更新操作,系统会使用字节锁;对快捷大对象的处理,可以使用字节范围锁,以提高数据利用率。

 

2. 锁的粒度

 

INFORMIX系统锁的粒度,可以划分为:数据库、表、页、记录。可以通过以下方式使用数据库锁:

1)可以在打开数据库时,使数据库处于锁定模式。

2)在整个数据库系统启动时,使系统进入静止状态。

要使用表锁,可以在命令行或者应用程序中,使用lock table命令。另外表锁也可能由于锁的升级而获得。

页锁和记录锁是表要使用的锁模式。在创建表时,可以指定表所使用的锁模式。如果没有指定,系统就依次检查配置参数DEF_TABLE_LOCKMODE、环境变量IFX_DEF_TABLE_LOCKMODE的设定。缺省情况下,系统使用页锁。表一旦被创建,锁的模式就确定下来,但用户可以使用命令改变它的锁模式。

 

3. 锁的升级

 

INFORMIX系统中,存在两种情况下的锁升级:由记录锁升级为表锁、由页锁升级为表锁。对这两种情况下的锁升级,相关资料中并没有给出有关的说明和限制。

除此之外,对快捷大对象,如果一个事务所拥有的字节范围锁数目,超过系统中当前锁数目的33%,就会出现锁的升级。

 

4. 锁的等待和超时

 

可以使用set lock mode命令,在命令行或者应用程序中为单个会话设定锁的等待、超时时间。在缺省情况下系统不会等待,直接返回错误信息。

 

5. 隔离级别

 

尽管INFORMIX系统也使用四级隔离级别,但仍旧和SQL-92标准(第6.3.8一节所述)略有不同。INFORMIX系统的四级隔离级别如下:

1)脏读(dirty read),隔离级别0级。对应SQL-92标准的0级。

2)落实的读(committed read),隔离级别1级。对应SQL-92标准的1级。

3)游标稳定性(cursor stability),隔离级别2级。在使用游标(cursor)操作数据时,当前被处理的记录需要加共享锁。在游标指针移动到下一条记录后,当前记录的共享锁被释放,而下一条记录被加共享锁。如果不使用游标,此隔离级别就等同于隔离级别1级。

4)可重复读(repeatable read),隔离级别3级。对应SQL-92标准的2级和3级。

缺省情况下,INFORMIX系统使用隔离级别1。用户可以使用set isolation命令,为随后要执行的SQL语句,设置要使用的隔离级别。而对不记录日志信息的数据库,则只能使用隔离级别0

 

6. 死锁

 

配置参数DEADLOCK_TIMEOUT,设定了系统检查死锁的时间间隔。

阅读(699) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~