Merge compact/non compact commits, make aborts dynamically sized
От | Andres Freund |
---|---|
Тема | Merge compact/non compact commits, make aborts dynamically sized |
Дата | |
Msg-id | 20150220152150.GD4149@awork2.anarazel.de обсуждение исходный текст |
Ответы |
Re: Merge compact/non compact commits, make aborts dynamically
sized
|
Список | pgsql-hackers |
Hi, Right now wal_level=logical implies that the compact commit record format isn't used and similarly 2pc commits also include the non compact format of commits. In the course of the 'replication identifier' patch submitted to the current commitfest I added more information to the non compact commit record if a xinfo flag was present. I optionally adding data is a better course than the rigorous split between compact/non compact commits. In the attached patch I've merged compact/noncompact code, made aborts use similar logic to avoid including useless bytes and used both for the 2pc equivalents. To avoid using more space in the compact case the 'xinfo' field indicating the presence of further data is only included when a byte in the xl_info flag is set (similar to what heap rmgr does). That means that transactions without subtransactions and other things are four bytes smaller than before, but ones with a subtransaction but no other complications 4 byte larger. database info, nsubxacts, nrels, nmsgs et al are also only included if required. I think that's a overall win, even disregarding wal_level = logical. When compact commits were discussed in http://archives.postgresql.org/message-id/235610.92468.qm%40web29004.mail.ird.yahoo.com such a scheme was discussed, but then discarded. I think that was a mistake; the information in commit records is likely to be growing and having to decide between the compact/non compact form instead on a more granular level makes decisions harder. The information about two forms of commits already has creeped into too many places... I generally like how the patch looks, the relevant code actually looks clearer to me afterwards - especially RecordTransactionCommit() being noticeably shorter, decode.c having to care about less and that twophase.c knows a less about xact.c type records seems good. There's one bit that I'm not so sure about though: To avoid duplication I've added Parse(Commit/Abort)Record(), but unfortunately that has to be available both in front and backend code - so it's currently living in xactdesc.c. I think we can live with that, but it's certainly not pretty. I'm not going to rebase the replication identifier patch over this for now, seems premature until some feedback is in. Comments? Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Вложения
В списке pgsql-hackers по дате отправления: