Re: [Proposal] Global temporary tables
曾文旌 (义从) <wenjing.zwj@alibaba-inc.com>
From: 曾文旌 <wenjing.zwj@alibaba-inc.com>
To: movead.li@highgo.ca
Cc: tushar <tushar.ahuja@enterprisedb.com>, Prabhat Sahu <prabhat.sahu@enterprisedb.com>, Pavel Stehule <pavel.stehule@gmail.com>, robertmhaas <robertmhaas@gmail.com>, Tomas Vondra <tomas.vondra@2ndquadrant.com>, Konstantin Knizhnik <k.knizhnik@postgrespro.ru>, pgsql-hackers <pgsql-hackers@postgresql.org>, "蔡松露(子嘉)" <zijia@taobao.com>, "Cai, Le" <le.cai@alibaba-inc.com>, wenjing@gmail.com
Date: 2020-08-07T08:17:22Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
PageAddItemExtended(): Add LP_UNUSED assertion.
- 30aaab26e521 14.0 cited
-
Remove temporary files after backend crash
- cd91de0d1795 14.0 cited
-
Fix comment in indexing.c
- 9fd2952cf492 14.0 cited
-
Fix failure to ignore leftover temp tables after a server crash.
- 6919b7e32947 9.3.0 cited
Thank you very much for reviewing this patch.
This is very important to improve the GTT.
> 2020年8月3日 下午3:09,movead.li@highgo.ca 写道:
>
>
> >Fixed in global_temporary_table_v29-pg13.patch
> >Please check.
>
> I find this is the most latest mail with an attachment, so I test and reply on
> this thread, several points as below:
>
> 1. I notice it produces new relfilenode when new session login and some
> data insert. But the relfilenode column in pg_class still the one when create
> the global temp table. I think you can try to show 0 in this area as what nail
> relation does.
I think getting the GTT to have a default relfilenode looks closer to the existing implementation, and setting it to 0 requires extra work and has no clear benefit.
What do you think?
I'd like to know the reasons for your suggestion.
>
> 2. The nail relations handle their relfilenodes by RelMapFile struct, and this
> patch use hash entry and relfilenode_list, maybe RelMapFile approach more
> understandable in my opinion. Sorry if I miss the real design for that.
We can see the STORAGE and statistics info for the GTT, including relfilenode, through view pg_gtt_relstats
postgres=# \d gtt
Table "public.gtt"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
a | integer | | |
b | integer | | |
postgres=# insert into gtt values(1,1);
INSERT 0 1
postgres=# select * from pg_gtt_relstats ;
schemaname | tablename | relfilenode | relpages | reltuples | relallvisible | relfrozenxid | relminmxid
------------+-----------+-------------+----------+-----------+---------------+--------------+------------
public | gtt | 16384 | 0 | 0 | 0 | 532 | 1
(1 row)
postgres=# truncate gtt;
TRUNCATE TABLE
postgres=# select * from pg_gtt_relstats ;
schemaname | tablename | relfilenode | relpages | reltuples | relallvisible | relfrozenxid | relminmxid
------------+-----------+-------------+----------+-----------+---------------+--------------+------------
public | gtt | 16387 | 0 | 0 | 0 | 533 | 1
(1 row)
>
> 3. I get a wrong result of pg_relation_filepath() function for global temp table,
> I think it's necessaryto keep this an correct output.
postgres=# select pg_relation_filepath(oid) from pg_class where relname = 'gtt';
pg_relation_filepath
----------------------
base/13835/t3_16384
(1 row)
I didn't find anything wrong. Could you please give me a demo.
>
> 4. In gtt_search_by_relid() function, it has not handle the missing_ok argument
> if gtt_storage_local_hash is null. There should be some comments if it's the right
> code.
This is a problem that has been fixed in global_temporary_table_v34-pg13.patch.
>
> 5. It's a long patch and hard to review, I think it will pretty good if it can be
> divided into several subpatches with relatively independent subfunctions.
Thank you for your suggestion, and I am considering doing so, including adding comments.
Wenjing
>
> Regards,
> Highgo Software (Canada/China/Pakistan)
> URL : www.highgo.ca <http://www.highgo.ca/>
> EMAIL: mailto:movead(dot)li(at)highgo(dot)ca