Re: On disable_cost

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: David Rowley <dgrowleyml(at)gmail(dot)com>
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Peter Geoghegan <pg(at)bowt(dot)ie>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: On disable_cost
Date: 2024-10-02 18:04:08
Message-ID: 0cdd3504502aac827acb3ae615eda09aeb883f74.camel@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, 2024-10-02 at 21:55 +1300, David Rowley wrote:
> On Tue, 1 Oct 2024 at 06:17, Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at> wrote:
> > Why did you change "Disabled" from an integer to a boolean?
>
> I just don't think "Disabled Nodes" is all that self-documenting and
> I'm also unsure why the full integer value of disabled_nodes is
> required over just displaying the boolean value of if the node is
> disabled or not. Won't readers look at the remainder of the plan to
> determine information about which other nodes are disabled? Do we need
> to give them a running total?

I didn't want a running total, but maybe I misunderstood what a disabled
node is; see below.

> > If you see a join where two plans were disabled, that's useful information.
>
> I'm not sure if I follow what you mean here.  The patch will show
> "Disabled: true" for both the inner and outer side of the join if both
> of those are disabled.  The difference is that my patch does not show
> the join itself is disabled like master does. I thought that's what
> you were complaining about. Can you show an example of what you mean?

I ran the following example, and now I am confused.

CREATE TABLE tab_a (id integer);

CREATE TABLE tab_b (id integer);

SET enable_nestloop = off;
SET enable_hashjoin = off;

EXPLAIN SELECT * FROM tab_a JOIN tab_b USING (id);

QUERY PLAN
═════════════════════════════════════════════════════════════════════
Merge Join (cost=359.57..860.00 rows=32512 width=4)
Merge Cond: (tab_a.id = tab_b.id)
-> Sort (cost=179.78..186.16 rows=2550 width=4)
Sort Key: tab_a.id
-> Seq Scan on tab_a (cost=0.00..35.50 rows=2550 width=4)
-> Sort (cost=179.78..186.16 rows=2550 width=4)
Sort Key: tab_b.id
-> Seq Scan on tab_b (cost=0.00..35.50 rows=2550 width=4)

I would have expected to see "Disabled nodes: 2" with the merge join,
because both the nested loop join and the hash join have been disabled.

Why is there no disabled node shown?

Yours,
Laurenz Albe

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Laurenz Albe 2024-10-02 18:12:40 Re: On disable_cost
Previous Message Andrew Dunstan 2024-10-02 17:45:05 Re: pg_parse_json() should not leak token copies on failure