长事务 ( Long Transaction ) 是数据库用户经常会碰到和非常头疼的问题
长事务处理不当常常会引起数据库的崩溃,给企业运营带来不必要的损失
本文旨在帮助用户理解什么是长事务,为什么会出现长事务,怎样避免长事务以及如何解决长事务可能带来的系统挂起甚至崩溃问题
什么是“长事务”
要理解什么是“长事务”,还要从“事务”本身及数据库的逻辑日志工作原理谈起
所谓“事务”(transaction),是一个完整的不可分割的数据处理单元
该单元中所有的数据处理操作要么全部处理成功,要么因其中任意一个操作的失败而完全回滚至整个事务处理前状态
为了保证事务的完整性,Informix 数据库通过逻辑日志 (logical log) 来记录所有的事务操作及其处理的数据
逻辑日志的作用之一在于对数据所发生的变化进行记录以满足可能的回滚需要
Informix 数据库服务器把逻辑日志分成多个相互分离的磁盘空间,每个磁盘空间称为一个逻辑日志文件
由于逻辑日志文件的大小和个数由参数指定,整个逻辑日志的空间是相对固定的,并不能无限制的增长
所以对于逻辑日志文件的使用是循环进行的
Informix 数据库服务器按数字顺序依次填充空闲的(即状态为 free 或 av ailable)的逻辑日志文件
当第一个逻辑日志文件变满时,接着开始填充下一个逻辑日志文件,直到填充完最后一个逻辑日志文件
这时,数据库服务器回到第一个逻辑日志文件,试图将其内容释放,以循环使用 ( 如图 1)
循环使用的逻辑日志 释放已经使用过的逻辑日志,需要具备很多条件
其中之一就是该日志不能包含仍然活动的 ( 即还没有提交 ) 的事务
因为活动的事务随时存在需要回滚的可能性,如果在事务还没有提交时,包含该事务记录的日志由于被释放重用,原来的事务操作记录被覆盖,当事务由于各种原因需要回滚时,回滚所需的记录就会