Re: adding partitioned tables to publications
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: 赵锐 <875941708@qq.com>
Cc: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Amit Langote <amitlangote09@gmail.com>, Petr Jelinek <petr@2ndquadrant.com>, Rafia Sabih <rafia.pghackers@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-01-11T11:42:45Z
Lists: pgsql-hackers
Attachments
- v1-0001-Fix-relation-descriptor-leak.HEAD.patch (application/octet-stream) patch v1-0001
- v1-0001-Fix-relation-descriptor-leak.13.patch (application/octet-stream) patch v1-0001
On Wed, Dec 30, 2020 at 8:03 PM 赵锐 <875941708@qq.com> wrote: > > The first file of Amit's patch can not only re-range the code, but also fix a hidden bug. > To make it easy to see, I attach another patch. > "RelationIdGetRelation" will increase ref on owner->relrefarr, without "RelationClose", the owner->relrefarr will enlarge and re-hash. > When the capacity of owner->relrefarr is over than 10 million, enlarge and re-hash takes serial hours. And what's worse, increase ref will also take minutes, as the hash collision resolution is based on looking up an array in order. > When we want to publish 10 billion data under one partition table, it takes serial days up to increase ref, enlarge and re-hash, and CPU is always 99%. > After applying my patch, 10 billion will be published in 10 minutes. > It is a clear relation descriptor leak. The proposed fix seems correct to me. The patch wasn't getting applied to HEAD. So, I have prepared the separate patches for HEAD and 13. There are minor modifications in the patch like I have used RelationIsValid before closing the relation. I have not added any test because I see that there is already a test in src/test/subscription/t/013_partition. Kindly let me know your English name so that I can give you credit as a co-author? -- With Regards, Amit Kapila.
Commits
-
Fix relation descriptor leak.
- decf3fe61ca2 13.2 landed
- 044aa9e70e55 14.0 landed