Hou-san,

On Mon, May 24, 2021 at 10:31 AM houzj.f...@fujitsu.com
<houzj.f...@fujitsu.com> wrote:
> From: Amit Langote <amitlangot...@gmail.com>
> Sent: Thursday, May 20, 2021 8:23 PM
> > This one seems bit tough.  ExecPartitionCheck() uses the generic expression
> > evaluation machinery like a black box, which means execPartition.c can't 
> > really
> > tweal/control the time spent evaluating partition constraints.  Given that, 
> > we
> > may have to disable the caching when key->partexprs != NIL, unless we can
> > reasonably do what you are suggesting.[]
>
> I did some research on the CHECK expression that ExecPartitionCheck() execute.

Thanks for looking into this and writing the patch.  Your idea does
sound promising.

> Currently for a normal RANGE partition key it will first generate a CHECK 
> expression
> like : [Keyexpression IS NOT NULL AND Keyexpression > lowboud AND 
> Keyexpression < lowboud].
> In this case, Keyexpression will be re-executed which will bring some 
> overhead.
>
> Instead, I think we can try to do the following step:
> 1)extract the Keyexpression from the CHECK expression
> 2)evaluate the key expression in advance
> 3)pass the result of key expression to do the partition CHECK.
> In this way ,we only execute the key expression once which looks more 
> efficient.

I would have preferred this not to touch anything but
ExecPartitionCheck(), at least in the first version.  Especially,
seeing that your patch touches partbounds.c makes me a bit nervous,
because the logic there is pretty complicated to begin with.

How about we start with something like the attached?  It's the same
idea AFAICS, but implemented with a smaller footprint.  We can
consider teaching relcache about this as the next step, if at all.  I
haven't measured the performance, but maybe it's not as fast as yours,
so will need some fine-tuning.  Can you please give it a read?



--
Amit Langote
EDB: http://www.enterprisedb.com

Attachment: ExecPartitionCheck-eval-partexprs-once-PoC_v1.patch
Description: Binary data

Reply via email to