PostgreSQL源码解读》(132)——MVCC # 16(真空过程-lazy_vacuum_index函数# 1)

  

  本节简单介绍了PostgreSQL手工执行真空的处理流程,主要分析了ExecVacuum→真空→vacuum_rel→heap_vacuum_rel→lazy_scan_heap→lazy_vacuum_index函数的实现逻辑,该函数清理指数关系。   

  

}, relnamespace=2200, reltype=0, reloftype=0,   relowner=10, relam=403, relfilenode=50823, reltablespace=0, relpages=60, reltuples=8901, relallvisible=0,   reltoastrelid=0, relhasindex=false, relisshared=false, relpersistence=112“p”, relkind=105‘我’,relnatts=1,   relchecks=0, relhasoids=false, relhasrules=false, relhastriggers=false, relhassubclass=false,   relrowsecurity=false, relforcerowsecurity=false, relispopulated=true, relreplident=110 ' n ',   relispartition=false, relrewrite=0, relfrozenxid=0, relminmxid=0}   (gdb) p *统计数据   7美元=(IndexBulkDeleteResult *) 0 x0   (gdb) p * vacrelstats   8美元={hasindex=true, old_rel_pages=124, rel_pages=124, scanned_pages=59, pinskipped_pages=0,   frozenskipped_pages=1, tupcount_pages=59, old_live_tuples=12686, new_rel_tuples=14444, new_live_tuples=14444,   new_dead_tuples=0, pages_removed=0, tuples_deleted=100, nonempty_pages=124, num_dead_tuples=100,   max_dead_tuples=36084, dead_tuples=0 x2ab8820 num_index_scans=0, latestRemovedXid=397076,   lock_waiter_detected=false}   (gdb)      之前   

  初始化IndexVacuumInfo结构体   

  <前>   <代码>   (gdb) n   1691 ivinfo。指数=indrel;   (gdb)   1692 ivinfo。analyze_only=false;   (gdb)   1693 ivinfo.estimated_count=true;   (gdb)   1694 ivinfo。message_level=elevel;   (gdb)   1696 ivinfo。num_heap_tuples=vacrelstats→old_live_tuples;   (gdb)   1697 ivinfo。策略=vac_strategy;   (gdb)   

PostgreSQL源码解读》(132)——MVCC # 16(真空过程-lazy_vacuum_index函数# 1)