• David Rowley's avatar
    Fix incorrect row estimates used for Memoize costing · 23c2b76a
    David Rowley authored
    In order to estimate the cache hit ratio of a Memoize node, one of the
    inputs we require is the estimated number of times the Memoize node will
    be rescanned.  The higher this number, the large the cache hit ratio is
    likely to become.  Unfortunately, the value being passed as the number of
    "calls" to the Memoize was incorrectly using the Nested Loop's
    outer_path->parent->rows instead of outer_path->rows.  This failed to
    account for the fact that the outer_path might be parameterized by some
    upper-level Nested Loop.
    
    This problem could lead to Memoize plans appearing more favorable than
    they might actually be.  It could also lead to extended executor startup
    times when work_mem values were large due to the planner setting overly
    large MemoizePath->est_entries resulting in the Memoize hash table being
    initially made much larger than might be required.
    
    Fix this simply by passing outer_path->rows rather than
    outer_path->parent->rows.  Also, adjust the expected regression test
    output for a plan change.
    
    Reported-by: Pavel Stehule
    Author: David Rowley
    Discussion: https://postgr.es/m/CAFj8pRAMp%3DQsMi6sPQJ4W3hczoFJRvyXHJV3AZAZaMyTVM312Q%40mail.gmail.com
    Backpatch-through: 14, where Memoize was introduced
    23c2b76a
join.out 209 KB