From: | Dilip Kumar <dilipbalaut(at)gmail(dot)com> |
---|---|
To: | Rafia Sabih <rafia(dot)sabih(at)enterprisedb(dot)com> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, PostgreSQL Developers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Enabling parallelism for queries coming from SQL or other PL functions |
Date: | 2017-03-21 10:36:30 |
Message-ID: | CAFiTN-sn6rRd9tVcVSDH3-CvOMLBvhLTcnDTRYrqdr_XmO0=0w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Mar 21, 2017 at 3:36 PM, Rafia Sabih
<rafia(dot)sabih(at)enterprisedb(dot)com> wrote:
> On Wed, Mar 15, 2017 at 8:55 PM, Robert Haas <robertmhaas(at)gmail(dot)com> wrote:
>> Note this:
>>
>> if (completed || !fcache->returnsSet)
>> postquel_end(es);
>>
>> When the SQL function doesn't return a set, then we can allow
>> parallelism even when lazyEval is set, because we'll only call
>> ExecutorStart() once. But my impression is that something like this:
How about taking the decision of execute_once based on
fcache->returnsSet instead of based on lazyEval?
change
+ ExecutorRun(es->qd, ForwardScanDirection, count, !es->lazyEval);
to
+ ExecutorRun(es->qd, ForwardScanDirection, count, !fcache->returnsSet);
IMHO, Robert have the same thing in mind?
>SELECT * FROM blah() LIMIT 3
>
>...will trigger three separate calls to ExecutorRun(), which is a
>problem if the plan is a parallel plan.
And you also need to test this case what Robert have mentioned up thread.
--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2017-03-21 10:51:24 | Re: Patch: Write Amplification Reduction Method (WARM) |
Previous Message | Jan Michálek | 2017-03-21 10:35:33 | Re: Other formats in pset like markdown, rst, mediawiki |