本节简单介绍了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)