Planner question

Started by Tom Raneyover 17 years ago2 messages
#1Tom Raney
raneyt@cecs.pdx.edu

I've been working on a client application (based on the Red Hat Visual
Explain tool) to display all plans the planner considers graphically and
it does that. But, the trace functionality in the planner is always on
(and thus, taking up cycles and resources) whether or not it is
requested by the user.

My question is: How would I let the planner know when a planner session
has been invoked by the "explain" command? If I can slip a flag into
PlannerInfo or PlannerGlobal, that would be perfect. But, I'm a bit
stuck on how to get explain context to that point. I don't want to
modify the planner() entry function parameter list, unless absolutely
necessary.

I currently compile with DEBUG_OPTIMIZER - and that is one option - to
conditionally compile this functionality, but it would be great if this
could run on a lean production system.

-Tom Raney

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Raney (#1)
Re: Planner question

Tom Raney <raneyt@cecs.pdx.edu> writes:

My question is: How would I let the planner know when a planner session
has been invoked by the "explain" command? If I can slip a flag into
PlannerInfo or PlannerGlobal, that would be perfect. But, I'm a bit
stuck on how to get explain context to that point. I don't want to
modify the planner() entry function parameter list, unless absolutely
necessary.

Slip another flag bit into cursorOptions, perhaps? There's certainly
lots of room there.

Not that planner() is called from so many places that adding another
parameter would be out of the question. ISTM you'd have to do something
nearly as invasive to add the downstream flag to PlannerGlobal anyway,
because the only people that are likely to be seriously affected by a
change in planner()'s API would be people plugging into planner_hook,
and they'd be affected by PlannerGlobal changes too.

regards, tom lane