Re: Pluggable Storage - Andres's take
От | Andres Freund |
---|---|
Тема | Re: Pluggable Storage - Andres's take |
Дата | |
Msg-id | 20190418210507.fsj33hd4km6mf2qj@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Re: Pluggable Storage - Andres's take (Heikki Linnakangas <hlinnaka@iki.fi>) |
Список | pgsql-hackers |
Hi, On 2019-04-08 15:34:46 +0300, Heikki Linnakangas wrote: > The comments for relation_set_new_relfilenode() callback say that the AM can > set *freezeXid and *minmulti to invalid. But when I did that, VACUUM hits > this assertion: > > TRAP: FailedAssertion("!(((classForm->relfrozenxid) >= ((TransactionId) > 3)))", File: "vacuum.c", Line: 1323) Hm, that necessary change unfortunately escaped into the the zheap tree (which indeed doesn't set relfrozenxid). That's why I'd not noticed this. How about something like the attached? I found a related problem in VACUUM FULL / CLUSTER while working on the above, not fixed in the attached yet. Namely even if a relation doesn't yet have a valid relfrozenxid/relminmxid before a VACUUM FULL / CLUSTER, we'll set one after that. That's not great. I suspect the easiest fix would be to to make the relevant relation_copy_for_cluster() FreezeXid, MultiXactCutoff arguments into pointer, and allow the AM to reset them to an invalid value if that's the appropriate one. It'd probably be better if we just moved the entire xid limit computation into the AM, but I'm worried that we actually need to move it *further up* instead - independent of this change. I don't think it's quite right to allow a table with a toast table to be independently VACUUM FULL/CLUSTERed from the toast table. GetOldestXmin() can go backwards for a myriad of reasons (or limited by old_snapshot_threshold), and I'm fairly certain that e.g. VACUUM FULLing the toast table, setting a lower old_snapshot_threshold, and VACUUM FULLing the main table would result in failures. I think we need to fix this for 12, rather than wait for 13. Does anybody disagree? Greetings, Andres Freund
Вложения
В списке pgsql-hackers по дате отправления: