目录

opengauss-commit-ts

openGauss 特性开发赛 · 赛题三「事务 ID 反查事务提交时间」的内核实现。

给定一个事务 ID(xid),反查它实际提交的墙钟时间。用于审计合规、问题定位 (把 xmin/xmax 对上真实时刻)、数据变更时序回溯——不引入触发器/审计表, 每个已提交事务只多留一个轻量的提交时间戳。

  • 团队:程柯雷(太原理工大学)· 单人参赛
  • 上游:gitlink.org.cn/opengaussexamples/examples(决赛以 PR 形式提交回上游)
  • 设计文档:comps/gitlink/track1_2026openGauss/特性设计文档.md

思路

openGauss 源自 PostgreSQL 9.2.4,分叉早于 PG 9.5 的 commit_ts,内核里没有这个特性 (已实爬全仓确认无任何残留)。但 openGauss 自带一个几乎同构的现成范本——csnlogxid → 定长 CSN 的 SLRU)。本实现以 csnlog 为一比一模板改造成 xid → 定长提交时间戳 的 SLRU,天然贴合 openGauss 线程池模型与全局变量组织(g_instance/t_thrd/u_sess), 合并摩擦最小。

  • GUC 开关 track_commit_timestampPGC_POSTMASTER,默认 off,零开销)
  • pg_commit_ts SLRU 存储:xid 作页内下标,O(1) 反查;崩溃恢复 / WAL / vacuum 截断全复用
  • 提交路径打点:提交时把 xactStopTimestamp 写入映射;该值即写进 commit WAL 记录 (xl_xact_commit.xact_time)的同一时间,故备机 / 崩溃重放用 WAL 自带时间重建,无需新 rmgr
  • 反查内建函数 pg_xact_commit_timestamp(xid) → timestamptzpg_last_committed_xact() → (xid, timestamp)
SHOW track_commit_timestamp;
SELECT pg_xact_commit_timestamp('2049'::xid);
SELECT xmin, pg_xact_commit_timestamp(xmin) FROM my_table WHERE id = 100;
SELECT * FROM pg_last_committed_xact();

目录

src/gausskernel/storage/access/transam/commit_ts.cpp   新增 · 完整实现(模板:同目录 csnlog.cpp)
src/include/access/commit_ts.h                          新增 · 对外接口
patches/0001..0005-*.patch                              对现有内核文件的参考补丁
CHANGES.md                                              权威落点表(改哪个文件的哪里)
selftest/                                               独立可编译的算法自测(不需 openGauss)
docs/BUILD_AND_TEST.md                                  构建/测试说明与诚实边界

状态

  • 算法自测:宿主机 gcc 编译通过,20 项全过(selftest/RESULTS.txt)。
  • 内核集成与功能/性能测试报告:需 openEuler/CentOS 上构建 openGauss + 应用补丁后产出(见 docs/BUILD_AND_TEST.md)。

许可证:Mulan PSL v2(与 openGauss 一致)。

关于

openGauss track-1 problem-3: reverse-lookup a transaction commit time from its xid (track_commit_timestamp / commit_ts SLRU).

61.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号