关于数据库长事务的几个参数及程序设计
Informix数据库相关的几个主要参数为LTXHWM,LTXEHWM,LOGFILES,LOGSIZE
长事务发生在一个事务开始至所有事务使用的逻辑日志记录的LTXHWM 百分比的时间仍未提交或是回滚,则认为该事务为长事务。
例如:
session 1:
begin work;
insert into table tt values('001');
以下应修改为(thanks czw1413_cn):
然后不提交,也不回滚。 假设LTXHWM 为70,LTXEHWM为80,逻辑日志数量为100,则当其它事务继续写逻辑日志的地址与session 1开始的逻辑日志记录位置相差达到100*70%=70个逻辑日志时,系统认为发生长事务(session 1),于是回滚session 1的操作 [然后不提交,也不回滚。 假设LTXHWM 为70,LTXEHWM为80,逻辑日志总大小1000M,则当其它事务继续写逻辑日志的地址与session 1开始的逻辑日志记录位置达到1000M * 70%即700M时,系统认为发生长事务(session 1),于是回滚session 1的操作。]
若是session 1是个比较大的事务
delete from tt;
那么,当达到长事务高水印(LTXHWM),session 1的事务开始回滚,此时其它事务仍然可能继续处理。当达到独占的长事务高水印时,其它事务将被暂停(commit除外),剩余的逻辑日志将仅用于session 1的事务回滚。
以上可知,在事务比较大的情况下,需要增加逻辑日志总量大小以减轻可能的长事务带来的对数据库运行的影响(增加逻辑日志数量)或者程序设计将该事务拆分开多个事务处理;数据库程序应当谨慎的设计事务的提交和回滚,避免长时间不提交或者回滚,造成事务操作在长事务时回滚。
参数说明:
Long-Transaction High-Watermark (LTXHWM)
长事务深水线比例是指整个逻辑日志空间的一个百分比值。当一个事务占用整个逻辑日志空间的百分比超过这个值时,该事务就成为长事务。数据库系统系统就会强制对该事务进行回滚(rollback ), 以防止该事务继续填充日志,最终导致日志需要循环重用时无法释放而造成系统挂起。
Exclusive Access, Long-Transaction High-Watermark (LTXEHWM)
当一个事务到达长事务深水线比例(LTXHWM )后,数据库服务器会回滚该事务。事务回滚本身也会产生日志,仍然要继续填充日志空间。同时,由于并发事务的存在,其他事务也在不断填充日志空间。所以如果在该事务完全回滚之前,日志空间被填满,仍然会造成系统的挂起。为了尽量避免这种情况的发生,我们用独享的长事务深水线来限制长事物回滚时其他事务对日志空间的使用。
独享的长事务深水线也是整个逻辑日志空间的一个百分比值。当正在回滚的长事务占用日志空间的百分比到达这个值时,系统会急剧降低对日志文件的填充速度。此时,数据库系统几乎给予正在回滚的长事务以独占使用剩余日志空间的权利,以最大限度地保障长事务回滚能够在日志空间添满前能够顺利完成,从而使日志释放重用得以实现。
更详细的关于Informix 长事务解释参考: http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1001haodh/