Re: Extensible storage manager API - SMGR hook Redux

Поиск
Список
Период
Сортировка
От Matthias van de Meent
Тема Re: Extensible storage manager API - SMGR hook Redux
Дата
Msg-id CAEze2WhmGiwHCunAAwn66RKBpTnTrJ+LewoYSGHmtJKq_ZvmeA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Extensible storage manager API - SMGR hook Redux  (Kirill Reshke <reshkekirill@gmail.com>)
Список pgsql-hackers
On Mon, 4 Dec 2023 at 22:03, Kirill Reshke <reshkekirill@gmail.com> wrote:
>
> On Mon, 4 Dec 2023 at 22:21, Matthias van de Meent <boekewurm+postgres@gmail.com> wrote:
>>
>> On Mon, 4 Dec 2023 at 17:51, Kirill Reshke <reshkekirill@gmail.com> wrote:
>> >
>> > So, 0002 patch uses the `get_tablespace` function, which searches Catalog to tablespace SMGR id. I wonder how
`smgr_redo`would work with it? 
>>
>> That's a very good point I hadn't considered in detail yet. Quite
>> clearly, the current code is wrong in assuming that the catalog is
>> accessible, and it should probably be stored in a way similar to
>> pg_filenode.map in a file managed outside the buffer pool.
>>
> Hmm, pg_filenode.map  is a nice idea. So, simply maintain TableSpaceOId -> smgr id mapping in a separate file and
updatethe whole file on any changes, right? 
> Looks reasonable to me, but it is clear that this solution can be really slow in some patterns, like if we create
many-manytablespaces(the way you suggested it in the per-relation SMGR feature). Maybe we can store data in files
somehowseparately, and only update one chunk per operation. 

Yes, but that's a later issue... I'm not sure many-many tablespaces is
actually a good thing. There are already very few reasons to store
tables in more than just the default tablespace. For temporary
relations, there is indeed a guc to automatically put them into one
tablespace; and I can see a similar thing being useful for temporary
relations, too. Then there I can see high-performant local disks vs
lower-performant (but cheaper) local disks also as something
reasonable. But that only gets us to ~6 tablespaces, assuming separate
tablespaces for each combination of (normal, temp, unlogged) * (fast,
cheap). I'm not sure there are many other reasons to add tablespaces,
let alone making one for each table.

Note that you can select which tablespace a table is stored in, so I
see very little reason to actually do something about large numbers of
tablespaces being prohibitively expensive performance-wise.

Why do you want to have a whole new storage configuration for each of
your relations?

> Anyway, if we use a `pg_filenode.map` - like solution, we need to reuse its code infrasture, right? For example, it
seemsthat code that calculates checksums can be reused. 
> So, we need to refactor code here, define something like FileMap API maybe. Or is it not really worth it? We can just
writesimilar code twice. 

I'm not sure about that. I really doubt we'll need things that are
that similar: right now, the tablespace->smgr mapping could be
considered to be implied by the symlinks in /pg_tblspc/. Non-MD
tablespaces could add a file <oid>.tblspc that detail their
configuration, which would also fix the issue of spcoid->smgr mapping.

Kind regards,

Matthias van de Meent
Neon (https://neon.tech)



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

Предыдущее
От: Nathan Bossart
Дата:
Сообщение: Re: optimize atomic exchanges
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: Failure with pgbench and --disable-thread-safety in ~v16