PostgreSQL 源码解读(133)- MVCC#17(vacuum过程-lazy_vacuum_index函数#2)
本节简单介绍了PostgreSQL手工执行vacuum的处理流程,主要分析了B-Tree索引vacuum的处理过程,实现函数是btvacuumscan。
PostgreSQL 源码解读(132)- MVCC#16(vacuum过程-lazy_vacuum_index函数#1)
本节简单介绍了PostgreSQL手工执行vacuum的处理流程,主要分析了ExecVacuum->vacuum->vacuum_rel->heap_vacuum_rel->lazy_scan_heap->lazy_vacuum_index函数的实现逻辑,该函数清理index relation。
PostgreSQL 源码解读(131)- MVCC#15(vacuum过程-lazy_vacuum_heap函数)
本节简单介绍了PostgreSQL手工执行vacuum的处理流程,主要分析了ExecVacuum->vacuum->vacuum_rel->heap_vacuum_rel->lazy_scan_heap->lazy_vacuum_heap函数的实现逻辑,该函数访问堆表,标记废弃元组为未使用并在这些元组所在页面上压缩空闲空间。
PostgreSQL 源码解读(130)- MVCC#14(vacuum过程-lazy_scan_heap函数)
本节简单介绍了PostgreSQL手工执行vacuum的处理流程,主要分析了ExecVacuum->vacuum->vacuum_rel->heap_vacuum_rel->lazy_scan_heap函数的实现逻辑,该函数扫描已打开的heap relation,清理堆中的每个页面。
PostgreSQL 源码解读(129)- MVCC#13(vacuum过程-vacuum_set_xid_limits函数)
本节简单介绍了PostgreSQL手工执行vacuum的处理流程,主要分析了ExecVacuum->vacuum->vacuum_rel->heap_vacuum_rel->vacuum_set_xid_limits函数的实现逻辑,该函数计算最老的xmin和冻结截止点。
PostgreSQL 源码解读(128)- MVCC#12(vacuum过程-heap_vacuum_rel函数)
本节简单介绍了PostgreSQL手工执行vacuum的实现逻辑,主要分析了ExecVacuum->vacuum->vacuum_rel->heap_vacuum_rel函数的实现逻辑。
PostgreSQL 源码解读(127)- MVCC#11(vacuum过程-vacuum_rel函数)
本节简单介绍了PostgreSQL手工执行vacuum的主处理流程,主要分析了ExecVacuum->vacuum->vacuum_rel函数的实现逻辑。
PostgreSQL 源码解读(126)- MVCC#10(vacuum过程)
本节简单介绍了PostgreSQL手工执行vacuum的主处理流程,主要分析了ExecVacuum->vacuum函数的实现逻辑。该函数是VACUUM/ANALYZE命令的内部处理入口。
PostgreSQL 源码解读(125)- MVCC#9(vacuum-主流程)
本节简单介绍了PostgreSQL手工执行vacuum的主处理流程,主要分析了ExecVacuum函数的实现逻辑。
PostgreSQL 源码解读(124)- 后台进程#4(autovacuum进程#1)
本节简单介绍了PostgreSQL的后台进程:autovacuum,主要分析CreateCheckPoint函数的实现逻辑。
PostgreSQL 源码解读(123)- MVCC#8(提交事务-实际提交过程)
本节介绍了PostgreSQL提交事务的具体实现逻辑,主要解析了函数CommitTransaction->RecordTransactionCommit的实现逻辑。
PostgreSQL 源码解读(122)- MVCC#7(提交事务-整体流程)
本节介绍了PostgreSQL提交事务的整体处理逻辑,主要解析了函数CommitTransaction的实现逻辑。
PostgreSQL 源码解读(121)- MVCC#6(获取事务号-实现函数)
本节介绍了PostgreSQL获取事务号XID的逻辑,主要解析了函数AssignTransactionId->GetNewTransactionId的实现逻辑。 在GetNewTransactionId函数中,检查是否可以安全的分配XID. 这可以防止由于XID wraparound而导致的灾难性数据丢失. 基本规则是: 如果超过了xidVacLimit,开始尝试强制autovacuum循环. 如果超过了xidWarnLimit,开始发出警告. 如果超过了xidStopLimit,拒绝执行事务,直至以单用户模式运行.
PostgreSQL 源码解读(120)- MVCC#5(获取事务号-主逻辑)
本节介绍了PostgreSQL获取事务号XID的逻辑,主要解析了函数AssignTransactionId的实现逻辑。
PostgreSQL 源码解读(119)- MVCC#4(启动事务)
本节介绍了PostgreSQL启动事务的逻辑,主要内容是函数StartTransaction的实现逻辑。
PostgreSQL MVCC快照机制浅析
快照隔离是数据库实现并发控制的一种常用技术.本节简单探讨了理论快照模型、PostgreSQL中的工程实践以及由此推广到Postgres-XL的可能改进思路等.
PostgreSQL DBA(26) - MVCC#6(Tuple可见性判断-简化版)
本节介绍了Tuple可见性判断的基本逻辑,以下判断逻辑来自于Bruce Momjian写的Mvcc Unmasked - Bruce Momjian,推荐阅读. 判断逻辑((Xmin == my-transaction && inserted by the current transaction Cmin < my-command &&
PostgreSQL DBA(25) - MVCC#5(Tuple可见性判断)
本节介绍了Tuple可见性判断的基本逻辑,包括在xmin或xmax为当前事务的情况和xmin&max非当前事务的情况.
PostgreSQL 源码解读(118)- MVCC#3(Tuple可见性判断)
本节介绍了PostgreSQL判断元组可见性的实现逻辑,重点解析了HeapTupleSatisfiesMVCC函数的处理过程。 一、数据结构宏定义 //事务ID,无符号32位整型 typedef uint32 TransactionId; /* ---------------- * Special transaction ID values * 系统保留的事
PostgreSQL 源码解读(117)- MVCC#2(获取快照#2)
本节介绍了PostgreSQL获取事务快照的实现逻辑,重点解析了GetTransactionSnapshot->GetSnapshotData的处理过程。 一、数据结构全局/静态变量 /* * Currently registered Snapshots. Ordered in a heap by xmin, so that we can * quickly find the