Re: [HACKERS] Runtime Partition Pruning
От | Amit Langote |
---|---|
Тема | Re: [HACKERS] Runtime Partition Pruning |
Дата | |
Msg-id | 0b361a22-f995-e15c-a385-6d1b72dd0d13@lab.ntt.co.jp обсуждение исходный текст |
Ответ на | Re: [HACKERS] Runtime Partition Pruning (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: [HACKERS] Runtime Partition Pruning
|
Список | pgsql-hackers |
On 2018/04/13 1:57, Robert Haas wrote: >> It might be possible to do something better in each module by keeping >> an array indexed by RTI which have each entry NULL initially then on >> first relation_open set the element in the array to that pointer. > > I'm not sure that makes a lot of sense in the planner, but in the > executor it might be a good idea. See also > https://www.postgresql.org/message-id/CA%2BTgmoYKToP4-adCFFRNrO21OGuH%3Dphx-fiB1dYoqksNYX6YHQ%40mail.gmail.com > for related discussion. I think that a coding pattern where we rely > on relation_open(..., NoLock) is inherently dangerous -- it's too easy > to be wrong about whether the lock is sure to have been taken. It > would be much better to open the relation once and hold onto the > pointer, not just for performance reasons, but for robustness. About the specific relation_open(.., NoLock) under question, I think there might be a way to address this by opening the tables with the appropriate lock mode in partitioned_rels list in ExecLockNonleafAppendTables and keeping the Relation pointers around until ExecEndNode. Then instead of ExecSetupPartitionPruneState doing relation_open/close(.., NoLock), it just reuses the one that's passed by the caller. Attached a PoC patch. David, thoughts? Thanks, Amit
Вложения
В списке pgsql-hackers по дате отправления: