Re: BUG #10404: auto_explain for EXPLAIN ANLYZE.
От | Tomonari Katsumata |
---|---|
Тема | Re: BUG #10404: auto_explain for EXPLAIN ANLYZE. |
Дата | |
Msg-id | 537C1161.40809@po.ntts.co.jp обсуждение исходный текст |
Ответ на | Re: BUG #10404: auto_explain for EXPLAIN ANLYZE. (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: BUG #10404: auto_explain for EXPLAIN ANLYZE.
|
Список | pgsql-bugs |
Hi Tom, Thank you for checking it. (2014/05/20 20:51), Tom Lane wrote: > katsumata.tomonari@po.ntts.co.jp writes: >> [ auto_explain changes the user-visible behavior of EXPLAIN ] >> Is this an intentional thing? or bug? > > Yeah, that's a bug. The code in explain.c is looking at whether it got > timing results, not whether it asked for them ... > I made a patch for this bug. Please see the attached patch. According to my understanding, explain.c flows like below. ExplainOnePlan - call ExecutorStart(explain_ExecutorStart) - call ExecutorRun(explain_ExecutorRun) - call ExecutorFinish(explain_ExecutorFinish) - call ExplainPrintPlan *A* - call ExecutorEnd(explain_ExecutorEnd) *B* The query result is printed at *A*, and then auto_explain log message is printed at *B*. So I add a check in explain_ExecutorFinish if the query has "EXPLAIN ANALYZE TIMING OFF" or not to supress timing output at *A*. And I add a check in explain_ExecutorEnd if the setting of auto_explain need timing information or not. To distinguish "EXPLAIN ANALYZE TIMING OFF" or not, I use queryDesc->instrument_options has INSTRUMENT_ROWS flag or not. And also to distinguish if auto_explain needs timing info or not, I use queryDesc->instrument_options has INSTRUMENT_TIMING flag or not. This works fine, but I'm not sure I should to use INSTRUMENT_ROWS flag for this. Because it seems that the flags is used but not referenced from anywhere in current code. Will this flag be obsoleted? regards, -------------------- Tomonari Katsumata
Вложения
В списке pgsql-bugs по дате отправления: