Re: Doc limitation update proposal: include out-of-line OID usage per TOAST-ed columns

Поиск
Список
Период
Сортировка
От Jakub Wartak
Тема Re: Doc limitation update proposal: include out-of-line OID usage per TOAST-ed columns
Дата
Msg-id CAKZiRmznqTrMP5Oft7rt7KMj8jxKbADMJEQ_=DGSdp+MN2BRLA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Doc limitation update proposal: include out-of-line OID usage per TOAST-ed columns  (John Naylor <john.naylor@enterprisedb.com>)
Ответы Re: Doc limitation update proposal: include out-of-line OID usage per TOAST-ed columns  (John Naylor <john.naylor@enterprisedb.com>)
Список pgsql-hackers
Hi John,

Thanks for your review. Here's v2 attached.

> -    <entry>partition keys</entry>
> -    <entry>32</entry>
> -    <entry>can be increased by recompiling <productname>PostgreSQL</productname></entry>
> +     <entry>partition keys</entry>
> +     <entry>32</entry>
> +     <entry>can be increased by recompiling <productname>PostgreSQL</productname></entry>
>
> Spurious whitespace.

Hopefully fixed, I've tried to align with the other entries tags.

> -     <entry>limited by the number of tuples that can fit onto 4,294,967,295 pages</entry>
> -     <entry></entry>
> +     <entry>limited by the number of tuples that can fit onto 4,294,967,295 pages or using up to 2^32 OIDs for
TOASTedvalues</entry>
 
> +     <entry>please see discussion below about OIDs</entry>
>
> I would keep the first as is, and change the second for consistency to "see note below on TOAST".

Fixed.

> Also, now that we have more than one note, we should make them more separate. That's something to discuss, no need to
doanything just yet.
 

OK.

> The new note needs a lot of editing to fit its new home. For starters:
>
> + <para>
> +  For every TOAST-ed columns
>
> column

Fixed.

> + (that is for field values wider than TOAST_TUPLE_TARGET
> +  [2040 bytes by default]), due to internal PostgreSQL implementation of using one
> +  shared global OID counter - today you cannot have more than
>
> + 2^32
>
> Perhaps it should match full numbers elsewhere in the page.

Fixed.

>
> +(unsigned integer;
>
> True but irrelevant.
>
> +  4 billion)
>
> Imprecise and redundant.

Removed both.

> + out-of-line values in a single table, because there would have to be
> +  duplicated OIDs in its TOAST table.
>
> The part after "because" should be left off.

Removed.

> +  Please note that that the limit of 2^32
> +  out-of-line TOAST values applies to the sum of both visible and invisible tuples.
>
> We didn't feel the need to mention this for normal tuples...

Right, but this somewhat points reader to the queue-like scenario
mentioned by Nikita.

> +  It is therefore crucial that the autovacuum manages to keep up with cleaning the
> +  bloat and free the unused OIDs.
> + </para>
>
> Out of place.

I have somewhat reworded it, again just to reference to the above.

> + <para>
> +  In practice, you want to have considerably less than that many TOASTed values
> +  per table, because as the OID space fills up the system might spend large
> +  amounts of time searching for the next free OID when it needs to generate a new
> +  out-of-line value.
>
> s/might spend large/will spend larger/ ?

Fixed.

> + After 1000000 failed attempts to get a free OID, a first log
> +  message is emitted "still searching for an unused OID in relation", but operation
> +  won't stop and will try to continue until it finds the free OID.
>
> Too much detail?

OK - partially removed.

> + Therefore,
> +  the OID shortages may (in very extreme cases) cause slowdowns to the
> +  INSERTs/UPDATE/COPY statements.
>
> s/may (in very extreme cases)/will eventually/

Fixed.

> + It's also worth emphasizing that
>
> Unnecessary.

Removed.

> + only field
> +  values wider than 2KB
>
> TOAST_TUPLE_TARGET

Good catch, fixed.

> + will consume TOAST OIDs in this way. So, in practice,
> +  reaching this limit would require many terabytes of data in a single table,
>
> It may be worth mentioning what Nikita said above about updates.

I've tried (with the above statement with visible and invisible tuples).

> +  especially if you have a wide range of value widths.
>
> I never understood this part.

I've changed it, but I wonder if the new "large number of wide
columns" isn't too ambiguous due to "large" (?)

> +   <row>
> +     <entry>large objects size</entry>
> +     <entry>subject to the same limitations as single <symbol>relation size</symbol></entry>
> +     <entry>LOs are stored in single pg_largeobjects relation</entry>
> +   </row>
>
> Are you under the impression that we can store a single large object up to table size? The limit is 4TB, as
documentedelsewhere.
 

I've wrongly put it, I've meant that pg_largeobject also consume OID
and as such are subject to 32TB limit.

>
> +   <row>
> +     <entry>large objects number</entry>
>
> "large objects per database"

Fixed.

> +     <entry>subject to the same limitations as <symbol>rows per table</symbol></entry>
>
> That implies table size is the only factor. Max OID is also a factor, which was your stated reason to include LOs
herein the first place.
 

Exactly..

Regards,
-Jakub Wartak.

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Daniel Verite"
Дата:
Сообщение: Re: Order changes in PG16 since ICU introduction
Следующее
От: Robert Haas
Дата:
Сообщение: Re: Find dangling membership roles in pg_dumpall