企鹅fm和喜马拉雅fm:DB2中锁升级 - xiangmeng2000的个人空间 - ITPUB个人空间 - powered by X-Space

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 16:02:26

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

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

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

 

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

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

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

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