From: | Alexander Korotkov <aekorotkov(at)gmail(dot)com> |
---|---|
To: | Andrei Lepikhov <lepihov(at)gmail(dot)com> |
Cc: | Alexander Lakhin <exclusion(at)gmail(dot)com>, Pavel Borisov <pashkin(dot)elfe(at)gmail(dot)com>, Teodor Sigaev <teodor(at)sigaev(dot)ru>, Pgsql Hackers <pgsql-hackers(at)postgresql(dot)org>, Aleksander Alekseev <aleksander(at)timescale(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Michael Paquier <michael(at)paquier(dot)xyz> |
Subject: | Re: type cache cleanup improvements |
Date: | 2024-09-12 23:38:40 |
Message-ID: | CAPpHfdsQhwUrnB3of862j9RgHoJM--eRbifvBMvtQxpC57dxCA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Sat, Aug 31, 2024 at 10:33 PM Andrei Lepikhov <lepihov(at)gmail(dot)com> wrote:
> On 29/8/2024 11:01, Alexander Korotkov wrote:
> > On Mon, Aug 26, 2024 at 11:26 AM Alexander Korotkov
> >> Secondly, I'm not terribly happy with current state of type cache.
> >> The caller of lookup_type_cache() might get already invalidated data.
> >> This probably OK, because caller probably hold locks on dependent
> >> objects to guarantee that relevant properties of type actually
> >> persists. At very least this should be documented, but it doesn't
> >> seem so. Setting of tupdesc is sensitive to its order of execution.
> >> That feels quite fragile to me, and not documented either. I think
> >> this area needs improvements before we push additional functionality
> >> there.
> >
> > I see fdd965d074 added a proper handling for concurrent invalidation
> > for relation cache. If a concurrent invalidation occurs, we retry
> > building a relation descriptor. Thus, we end up with returning of a
> > valid relation descriptor to caller. I wonder if we can take the same
> > approach to type cache. That would make the whole type cache more
> > consistent and less fragile. Also, this patch will be simpler.
> I think I understand the solution from the commit fdd965d074.
> Just for the record, you mentioned invalidation inside the
> lookup_type_cache above. Passing through the code, I found the only
> place for such a case - the call of the GetDefaultOpClass, which
> triggers the opening of the relation pg_opclass, which can cause an
> AcceptInvalidationMessages call. Did you mean this case, or does a wider
> field of cases exist here?
I've tried to implement handling of concurrent invalidation similar to
commit fdd965d074. However that appears to be more difficult that I
thought, because for some datatypes like arrays, ranges etc we might
need fill the element type and reference it. So, I decided to
continue with the current approach but borrowing some ideas from
fdd965d074. The revised patchset attached.
0001 - adds comment about concurrent invalidation handling
0002 - revised c14d4acb8. Now we track type oids, whose
TypeCacheEntry's filing is in-progress. Add entry to
RelIdToTypeIdCacheHash at the end of lookup_type_cache() or on the
transaction abort. During invalidation don't assert
RelIdToTypeIdCacheHash to be here if TypeCacheEntry is in-progress.
------
Regards,
Alexander Korotkov
Supabase
Attachment | Content-Type | Size |
---|---|---|
v11-0001-Update-header-comment-for-lookup_type_cache.patch | application/x-patch | 1.4 KB |
v11-0002-Avoid-looping-over-all-type-cache-entries-in-Typ.patch | application/x-patch | 18.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Tomas Vondra | 2024-09-12 23:44:58 | Re: scalability bottlenecks with (many) partitions (and more) |
Previous Message | Thomas Munro | 2024-09-12 22:55:31 | Re: [PATCH] audo-detect and use -moutline-atomics compilation flag for aarch64 |