ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DB2中锁升级

DB2中锁升级

原创 Linux操作系统 作者:xiangmeng2000 时间:2010-05-17 22:25:31 0 删除 编辑

      DB2数据库中的每个锁在内存中都需要一定的内存空间,为了减少锁需要的内存开销,DB2提供了锁升级功能。锁升级通过对表加上非意图性的表锁,同时释放行锁来减少锁的数目,从而达到减少锁所需要的内存开销的目的。锁升级是数据库管理器自动完成,但是有两个数据库配置参数直接影响着锁升级的处理:

Locklist :  数据库全局内存中用于存的内存,单位是页(4k)

Maxlocks: 允许某个应用程序所有的锁所使用的内存占整个锁内存的百分比。

 

在两种情况下会触发锁升级:

·某个应用程序请求的锁所占用的内存空间超出了maxlocks和locklist的乘积大小。这时,数据库管理器尝试为该提出锁请求的应用程序申请表锁,同时释放行锁来节省锁内存空间。

·数据库中的所有锁占用的内存空间超过locklist大小。这时,数据库管理器也将尝试为提出锁请求的应用申请表锁,并释放行锁来节省内存空间。

锁升级有可能会失败,例如:一个应用正在对一个表加IX锁,对表中的某些行加X锁,另一个应用又来请求表上的IS锁以及表中大量行上的S锁,由于申请的锁数目过多而引起锁升级。于是数据库管理器尝试着为该应用申请表锁S来减少应用所需要的锁的数目,但是表锁S与表上已经存在的IX锁相冲突,于是锁升级不能成功。于是锁升级失败的应用接到一个-912的SQLCODE。在锁升级失败后,应该考虑增加locklist或maxlocks,同时对于编程人员而言,可以在程序里对锁升级失败的应用进行回滚并重新提交(例如:if sqlca.sqlcode=-912 then rollback and retry)

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

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-05-29

  • 博文量
    11
  • 访问量
    16459