zoukankan      html  css  js  c++  java
  • 什么是purge操作

    要明白什么清空(purge)操作,你得明白什么是事务的多版本控制,即MVCC(multi-version concurrency control)。Innodb为了实现MVCC,

    需要在表空间内保存老版本的记录信息,这些信息存储于回滚段中(rollback segment),所谓回滚段,在物理存储上是UNDO log的记录。

    Purge到底做了些什么?其实它就相当于一个垃圾收集器。取个例子,当用户下一个命令,如 “DELETE FROM t WHERE c = 1;”,

    InnoDB 不会马上删除对应的记录,它会做如下三件事情:

    它标记此记录为删除(通过删除标记位)

    存储原始的记录到UNDO log

    更新记录列DB_TRX_ID和DB_ROLL_PTR(这些列是Innodb在原记录列上增加的)。DB_TRX_ID记录了最后操作记录的事务ID。

    DB_ROLL_PTR也叫回滚指针(rollback pointer),指向UNDO log 记录,此UNDO Log记录了原始记录的信息,这些信息可以

    用来重建原始记录(如发生了rollback的情况)。如果操作是插入,还会有一个DB_ROW_ID,这个指明了新记录的行号.

    当事务提交后,那些标记了删除的记录,以及UNDOLog中的记录并不会马上清除,这些记录信息可以被其它事务所重用,

    或是共享。只有当没有任何事务共享这些记录的时候,这些记录才会被清除(purge)。这就是所谓purge操作。

    而为了提高数据库的操作效率,purge操作是由另外的线程异步完成。这就是为何前面你所看到的为何存在unpurged的事务的原因。

  • 相关阅读:
    经典背景音乐集(转)
    商业模式的思考
    PHP5.4的变化关注What has changed in PHP 5.4.x
    yii模版中的写法
    设计模式(一)工厂模式Factory(创建型)
    yii模版中的判断方法
    Yacc 与 Lex 快速入门(词法分析和语法分析)
    Windows PHP 中 VC6 X86 和 VC9 X86 的区别及 Non Thread Safe 的意思
    金融系列1《借贷记卡介绍》
    设计模式概论
  • 原文地址:https://www.cnblogs.com/olinux/p/5593538.html
Copyright © 2011-2022 走看看