Innodb事物状态的固化

86 阅读1分钟

简单记录一下

我们知道在做Crash recovery的时候需要根据事物状态做相应的处理

- ACTIVE :回滚 - PREPARE:一句binlog中的XID进行判断是否回滚还是提交 - COMMIT:当然就提交了

那么这种状态记录在哪里的呢?实际上他是记录在undo segment header和undo log record header中的。恢复后undo是完整的我们只需要复活这些事物就好如下: 参考函数:

trx_lists_init_at_db_start
trx_resurrect_insert
trx_resurrect_update 
trx_rollback_or_clean_recovered

#define TRX_UNDO_ACTIVE		1	/* contains an undo log of an active
					transaction */
#define	TRX_UNDO_CACHED		2	/* cached for quick reuse */
#define	TRX_UNDO_TO_FREE	3	/* insert undo segment can be freed */ 
#define	TRX_UNDO_TO_PURGE	4	/* update undo segment will not be
					reused: it can be freed in purge when
					all undo data in it is removed */
#define	TRX_UNDO_PREPARED	5	/* contains an undo log of an
					prepared transaction */