I'm working on microvacuum for gist access method.
Briefly microvacuum includes two steps:
1. When search tells us that the tuple is invisible to all transactions it is marked LP_DEAD and page is marked as "has dead tuples",
2. Then, when insert touches full page which has dead tuples it calls microvacuum instead of splitting page.
You can find a kind of review here [1].
While writing patch, I found strange GISTPageOpaqueData flag -
F_TUPLES_DELETED.
#define F_TUPLES_DELETED (1 << 2) /* some tuples on the page are dead */
#define BTP_HAS_GARBAGE (1 << 6) /* page has LP_DEAD tuples */
But it's definitely not the same things. I found only two mentions of this flag.
Do anyone need it at all? I found no place where this flag is checked.
Is it correct using of the flag?
I need an advice, what would be better:
- to add new flag like F_HAS_GARBAGE,
- or to delete all mentions of F_TUPLES_DELETED and use it in gist microvacuum.
--
Best regards,
Lubennikova Anastasia