转载

InnoDB---UNDO日志与回滚

InnoDB---UNDO日志与回滚

2016-12-17 22:05:48 |  分类: 数据库 |  标签: | 举报 | 字号   订阅

     

用微信  “扫一扫”

将文章分享到朋友圈。

 
InnoDB---UNDO日志与回滚

用易信  “扫一扫”

将文章分享到朋友圈。

 
  下载LOFTER 我的照片书  |

    事务通过 trx_rsegs_t 与系统表空间和临时表空间等物理存储联系起来的方式如下:

/** Rollback segments assigned to a transaction for undo logging. */

struct trx_rsegs_t {

/** undo log ptr holding reference to a rollback segment that resides in

     system/undo tablespace used for undo logging of tables that needs to be recovered on crash. */

    trx_undo_ptr_t     m_redo;    // 系统的 UNDO 表空间

/** undo log ptr holding reference to a rollback segment that resides in

     temp tablespace used for undo logging of tables that doesn't need to be recovered on crash. */

    trx_undo_ptr_t     m_noredo; // 系统的临时表空间

};

    系统表空间和临时表空间等物理存储与 UNDO 日志之间的关系如下:

/** Represents an instance of rollback segment along with its state variables.*/

struct trx_undo_ptr_t {  

    // 标识分配给事务的回滚段,这样把事务和回滚段建立起联系来。然后通过 trx_rsegs_t 与系统表空间和临时表空间等物理存储联系起来

    ;            // 指向回滚段

    trx_undo_t*     insert_undo;     /*!< pointer to the insert undo log , or NULL if no inserts performed yet */   // 事务指向 insert undo log

    trx_undo_t*     update_undo;     /*!< pointer to the update undo log , or ULL if no update performed yet */     // 事务指向 update undo log

};

    而回滚段的信息又如下:

/** The rollback segment memory object */

struct trx_rseg_t {

    ulint     id;       // 回滚段的标识

...

    ulint     space;    // 回滚段的头信息在表空间中的位置,表空间标识

    ulint     page_no; // 回滚段的头信息在表空间中的位置,页号

page_size_t     page_size; /** page size of the relevant tablespace */

   ulint           max_size; /** maximum allowed size in pages */    

ulint           curr_size; /** current size in pages */

...

    /** 执行 UPDATE 操作产生的 UODO 日志,包括先删除后插入的过程中产生的 UODO 信息,事务完成,信息依然被保留,用于 MVCC 机制下的一致性读   */

/** List of update undo logs */

UT_LIST_BASE_NODE_T(trx_undo_t)     update_undo_list;

/** List of update undo log segments cached for fast reuse */

UT_LIST_BASE_NODE_T(trx_undo_t)     update_undo_cached;

    /* 执行 INSERT 操作产生的 UODO 日志,这些信息是临时的,事务结束后就被清理 */

/** List of insert undo logs */

UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_list;

/** List of insert undo log segments cached for fast reuse */

UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_cached;

...

};

  评论这张

阅读( 2 ) | 评论( 0 )

     
InnoDB---UNDO日志与回滚

用微信  “扫一扫”

将文章分享到朋友圈。

 
InnoDB---UNDO日志与回滚

用易信  “扫一扫”

将文章分享到朋友圈。

 

喜欢 推荐 转载

历史上的今天

在LOFTER的更多文章

评论

原文  http://blog.163.com/li_hx/blog/static/1839914132016111710548915
正文到此结束
Loading...