ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MaxDB有关锁机制

MaxDB有关锁机制

原创 Linux操作系统 作者:orchidllh 时间:2005-06-22 00:00:00 0 删除 编辑

Locks

Use

原理上,多个进程可以在同一时间获得相同的数据库对象,比如同一个表。数据库系统使用锁同步并行操作和隔离单独的进程。


锁的类型:

Name

Objects that can be locked

Shared lock (SHARE LOCK)

共享锁

表、行、数据库目录

Exclusive lock (EXCLUSIVE LOCK)

排他锁

表、行、数据库目录

Optimistic Lock

Activities

请求锁

行级或者表级的锁可以通过数据库系统被隐式的请求或者释放,或者显示的被用户请求或者释放。对数据库目录的锁都是通过数据库系统隐式的请求和释放的。

可以使用隔离级别决定什么时候什么类型的锁被设置,决定进程的并行度和将会出现的现象。可以在数据库的session启动的时候定义隔离级别,如果没有定义,则使用默认值。

依赖于隔离级别,数据库系统在执行sql语句的时候申请必须的锁。Sql语句在执行改变数据的操作(insertupdatedelete)的时候进程申请一个排他锁。

使用锁语法,也可以显示的为进程或者表中单独的行申请锁,通过在sql语句中定义一个LOCK选项,这个可以在任何的隔离级别,可以使用LOCK选项临时的为某些sql语句覆盖隔离级别

如果同一个进程在一个表中申请了太多的行级锁,数据库系统会试图设置一个表级锁在该表上,可以定义在有多少行级锁的时候系统转换成表级锁,通过配置MAXLOCKS参数(普通数据库参数)。

释放锁

Type of Lock

Release

通过使用LOCK语法显示的释放

数据库系统在进程结束的时候释放锁。除了以下的情况:

COMMIT或者ROLLBACK命令执行结束进程并且包含一个LOCK语法。

隐式设置共享锁

依赖于隔离级别

隐式设置排他锁

变更行排他锁

通过SQL语句修改数据申请的排他锁

表锁

在进程中没有释放,但是在整个进程结束的时候释放

没有被修改的行上的排他锁

行上的共享锁

可以通过UNLOCK语法被释放

可以通过REQUEST_TIMEOUT(特别数据库参数)限制用户等待一个锁被释放的时间,当这个时间超时的时候,会产生一个数据库系统的提示,可以根据该提示进一步处理。

显示锁的信息

可以查看锁的信息:

LOCKS系统表包含了有关锁的信息;

LOCK_HOLDER系统表;

LOCK_REQUESTOR系统表

LOCK_WAITS包含了有关锁等待的信息。

(这些系统表的所有者是DOMAIN用户)

现象

如果很多的进程同时访问相同的数据库对象,比如表,会在结果集上出现互相矛盾的情况,会出现以下的现象:

脏读:

进程 T1修改一个行。进程T2在进程T1提交之前读这个行,然后T1执行了回滚操作,这个时候T2读取的数据实际上是不存在的。

不可重复读

进程T1读一个行,进程T2修改或者删除了该行且提交了进程。如果随后T1再读该行,则T1返回改变的行或者提示行不存在。

Phantom

进程T1执行一个有查找条件的SQL语法S,返回结果集M。进程T2增加或修改数据使至少一新行满足S的查找条件,如果T1再执行S,则新的结果集和M是不同的。

通过设置 隔离级别决定哪种现象是可以接受的:.

Relationship between the 隔离级别 and phenomena

Phenomena

隔离级别

0

1 or 10

2 or 20

3 or 30

Dirty Read

yes

no

no

no

Non Repeatable Read

yes

yes

no

no

Phantom

yes

yes

yes

no

并行锁

下表显示在并行操作中存在哪些共享锁和排他锁:

A transaction has..

For a table

For a row

For the database catalog

Another transaction can...

Exclusive lock

Shared lock

Exclusive lock

Shared lock

Exclusive lock

Shared lock

Request an exclusive lock for the table

no

no

no

no

no

yes

Request a shared lock for the table

no

yes

no

yes

no

yes

Request an exclusive lock for any row in the table

no

no

-

-

no

yes

Request an exclusive lock for the locked row

-

-

no

no

-

-

Request an exclusive lock for a different row

-

-

yes

yes

-

-

Request a shared lock for any row in the table

no

yes

-

-

no

yes

Request a shared lock for the locked row

-

-

no

yes

-

-

Request a shared lock for a different row

-

-

yes

yes

-

-

Change the definition of the table in the database catalog

no

no

no

no

no

no

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/51862/viewspace-180645/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Mysql有关复制
请登录后发表评论 登录
全部评论

注册时间:2008-02-21

  • 博文量
    180
  • 访问量
    848510