Visibility Map笔记

【参考】

https://www.interdb.jp/pg/pgsql06.html#_6.1.

【背景】

1)pg8.4引入,为了降低vacuum的代价

page的vm可见性决定了vacuum是否跳过这个page

2)pg9.6加强了vm的功能,包含了tuples是否被frozen的信息

【freeze流程】

1)lazy模式

扫描仅仅含dead tuples的页

如果当前事务id是 50,002,500

the freezeLimit txid=50,002,500- 50,000,000=2500,#freezeLimit_txid=(OldestXminvacuum_freeze_min_age)

第0页:Three tuples are frozen because all t_xmin values are less than the freezeLimit txid. In addition, Tuple_1 is removed in this vacuum process due to a dead tuple.

第1页:This page is skipped by referring to the VM.

第2页:Tuple_7 and Tuple_8 are frozen; Tuple_7 is removed.

由于会跳过页,所以可能不会 freeze tuples completely 

2)eager模式

扫描所有页

2.1)触发条件

pg_database.datfrozenxid<(OldestXminvacuum_freeze_table_age)

举例

pg_database.datfrozenxid are 1821

OldestXmin is 150,002,000

the freezeLimit txid is 100,002,000.

【6.3.3 用vm改善eagerMode的freeze流程】

增加了all frozen的标记位

 

 第0页不需要扫描

第1页扫描完后,更新标记位置,下一次不用扫描

【6.4移除不需要的clog文件】

If the minimum pg_database.datfrozenxid is contained in the clog file '0002', the older files ('0000' and '0001') can be removed 

 

posted @ 2022-03-15 08:07  stupidstan2019  阅读(69)  评论(0编辑  收藏  举报