Re: tableam vs. TOAST
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Andres Freund <andres@anarazel.de>,
Alvaro Herrera <alvherre@2ndquadrant.com>, Prabhat Sahu <prabhat.sahu@enterprisedb.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2019-09-05T19:51:29Z
Lists: pgsql-hackers
On Thu, Sep 5, 2019 at 3:36 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Andres Freund <andres@anarazel.de> writes: > > Well, I still dislike making the toast chunk size configurable in a > > halfhearted manner. > > It's hard to make it fully configurable without breaking our on-disk > storage, because of the lack of any explicit representation of the chunk > size in TOAST data. You have to "just know" how big the chunks are > supposed to be. There was a concrete proposal about this from Andres here, down at the bottom of the email: http://postgr.es/m/20190802224251.lsxw4o5ebn2ng5ey@alap3.anarazel.de Basically, detoasting would tolerate whatever chunk size it finds, and the slice-fetching logic would get complicated. > However, it's reasonable to ask why we should treat it as an AM property, > especially a fixed AM property as this has it. If somebody does > reimplement toast logic in some other AM, they might well decide it's > worth the storage cost to be more flexible about the chunk size ... but > too bad, this design won't let them do it. Fair complaint. The main reason I want to treat it as an AM property is that TOAST_TUPLE_THRESHOLD is defined in terms of heap-specific constants, and having other AMs include heap-specific header files seems like a thing we should try hard to avoid. Once you're indirectly including htup_details.h in every AM in existence, it's going to be hard to be sure that you've got no other dependencies on the current heap AM. But I agree that making it not a fixed value could be useful. One benefit of it would be that you could just change the value, even for the current heap, without breaking access to already-toasted data. > It seems like this design throws away most of the benefit of a fixed > chunk size (mostly, being able to do relevant modulo arithmetic with > shifts and masks rather than full-fledged integer division) without > getting much of anything in return. I don't think you're really getting that particular benefit, because TOAST_TUPLE_THRESHOLD and TOAST_TUPLE_TARGET are not going to end up as powers of two. But you do get the benefit of working with constants instead of a value determined at runtime. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
tableam: New callback relation_fetch_toast_slice.
- ce242ae154dd 13.0 landed
-
tableam: Allow choice of toast AM.
- 83322e38da1a 13.0 landed
-
Move heap-specific detoasting logic into a separate function.
- e9fd0415e6e2 13.0 landed
-
Code cleanup for toast_fetch_datum and toast_fetch_datum_slice.
- d5406dea25b6 13.0 landed
-
Rename some toasting functions based on whether they are heap-specific.
- 2e8b6bfa90b2 13.0 landed
-
Create an API for inserting and deleting rows in TOAST tables.
- bd124996ef0d 13.0 landed
-
Split tuptoaster.c into three separate files.
- 8b94dab06617 13.0 landed
-
tableam: Move heap-specific logic from needs_toast_table below tableam.
- 1171d7d58545 12.0 cited