PostgreSQL 源码解读(145)- Storage Manager#1(RecordAndGetPageWithFreeSpace)
本节简单介绍了PostgreSQL在执行插入过程中与存储相关的函数RecordAndGetPageWithFreeSpace,该函数由RelationGetBufferForTuple函数调用,返回满足条件的block。
PostgreSQL 源码解读(144)- Buffer Manager#9(RelationGetBufferForTuple函数)
本节简单介绍了PostgreSQL在执行插入过程中与缓存相关的函数RelationGetBufferForTuple,该函数返回满足空闲空间 >= 给定大小的page,并且该page对应的buffer状态为pinned和并持有独占锁。
PostgreSQL 源码解读(143)- Buffer Manager#8(BufTableHashCode函数)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的实现函数ReadBuffer_common->BufferAlloc->BufTableHashCode,该函数根据BufferTag计算Hash Code。
PostgreSQL 源码解读(142)- Buffer Manager#7(hash_search_with_hash_value函数)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的实现函数ReadBuffer_common->BufferAlloc->BufTableInsert->hash_search_with_hash_value,该函数由BufTableInsert调用,对于给定的tag和buffer ID,插入到哈希表中。
PostgreSQL 源码解读(141)- Buffer Manager#6(Clock Sweep算法)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的Clock Sweep算法,其主要逻辑在StrategyGetBuffer函数中实现。 一、数据结构BufferDesc共享缓冲区的共享描述符(状态)数据 /* * Flags for buffer descriptors * buffer描述器标记 * * Note: TAG_VALID essen
PostgreSQL 源码解读(140)- Buffer Manager#5(BufTableInsert函数)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的实现函数ReadBuffer_common->BufferAlloc->BufTableInsert,该函数对于给定的tag和buffer ID,插入到哈希表中。
PostgreSQL 源码解读(139)- Buffer Manager#4(StrategyGetBuffer函数)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的实现函数ReadBuffer_common->BufferAlloc->StrategyGetBuffer,该函数在BufferAlloc()中,由bufmgr调用,用于获得下一个候选的buffer.。
PostgreSQL 源码解读(138)- Buffer Manager#3(BufferAlloc函数)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的实现函数ReadBuffer_common->BufferAlloc,该函数是ReadBuffer的子过程.处理共享缓存的搜索。
PostgreSQL 源码解读(137)- Buffer Manager#2(ReadBuffer_common函数)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的其中一个实现函数ReadBuffer_common,该函数是所有ReadBuffer相关的通用逻辑实现,返回Buffer。
PostgreSQL 源码解读(136)- Buffer Manager#1(ReadBufferExtended函数)
本节简单介绍了PostgreSQL缓存管理(Buffer Manager)中的其中一个实现函数ReadBufferExtended,该函数返回对应请求关系数据块的buffer.。
PostgreSQL 源码解读(135)- MVCC#19(vacuum过程-heap_execute_freeze_tuple函数)
本节简单介绍了PostgreSQL手工执行vacuum的处理流程,主要分析了ExecVacuum->vacuum->vacuum_rel->heap_vacuum_rel->lazy_scan_heap->heap_execute_freeze_tuple函数的实现逻辑,该函数执行实际的元组冻结操作(先前已完成准备工作)。
PostgreSQL DBA(27) - MVCC#7(避免长事务)
对于Update/Delete操作,PostgreSQL的MVCC机制仍会保留先前版本的数据,这些数据在VACUUM时将被清除.但如果在执行VACUUM时,存在先于VACUUM操作的活动事务,假定这些活动事务中最小的事务ID为OldestXmin,那么VACUUM不会清理删除事务ID(即xmax) > OldestXmin的元组,如果业务繁忙并且OldestXmin事务一直不提交,会导致存储空间一直膨胀,直至耗尽空间.
PostgreSQL 源码解读(134)- MVCC#18(vacuum过程-HeapTupleSatisfiesVacuum函数)
本节简单介绍了PostgreSQL手工执行vacuum的处理流程,主要分析了ExecVacuum->vacuum->vacuum_rel->heap_vacuum_rel->lazy_scan_heap->HeapTupleSatisfiesVacuum函数的实现逻辑,该函数判断一个元组是否可对所有正在运行中的事务可见。
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函数的实现逻辑。