ITPub博客

首页 > 数据库 > PostgreSQL > PostgreSQL DBA(24) - MVCC#4(快照中的xmax)

PostgreSQL DBA(24) - MVCC#4(快照中的xmax)

原创 PostgreSQL 作者:husthxd 时间:2019-01-10 12:30:13 0 删除 编辑

本节通过源码解释了snapshot中的xmax的具体含义.

一、xmax

上一节提到PostgreSQL通过txid_current_snapshot()函数获取快照,格式为xmin : xmax : xip_list,其中xmax应理解为最后已完结事务(COMMITTED/ABORTED)的txid + 1。
详见以下PG源码:


Snapshot
GetSnapshotData(Snapshot snapshot)
{
    /* xmax is always latestCompletedXid + 1 */
    xmax = ShmemVariableCache->latestCompletedXid;
    Assert(TransactionIdIsNormal(xmax));
    TransactionIdAdvance(xmax);
    /* initialize xmin calculation with xmax */
    globalxmin = xmin = xmax;
    ...
    snapshot->xmax = xmax;
    ...
    return snapshot;
}

xmax is always latestCompletedXid + 1,最后已完结事务(COMMITTED/ABORTED)的txid + 1(ShmemVariableCache->latestCompletedXid + 1)。

二、参考资料

PostgreSQL Source Code

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-2375387/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
长期从事政务、金融等行业产品研发和架构设计工作,对Oracle、PostgreSQL以及大数据等相关技术有深入研究。现就职于广州云图数据技术有限公司,系统架构师。

注册时间:2007-12-28

  • 博文量
    1146
  • 访问量
    3619640