From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Jakub Wartak <jakub(dot)wartak(at)enterprisedb(dot)com> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Simon Riggs <simon(dot)riggs(at)enterprisedb(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Damage control for planner's get_actual_variable_endpoint() runaway |
Date: | 2022-11-21 17:30:48 |
Message-ID: | 20221121173048.zqklejzpbeadnmsq@awork3.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
On 2022-11-21 17:06:16 +0100, Jakub Wartak wrote:
> @@ -6213,14 +6216,26 @@ get_actual_variable_endpoint(Relation heapRel,
> /* Fetch first/next tuple in specified direction */
> while ((tid = index_getnext_tid(index_scan, indexscandir)) != NULL)
> {
> + BlockNumber block = ItemPointerGetBlockNumber(tid);
> if (!VM_ALL_VISIBLE(heapRel,
> - ItemPointerGetBlockNumber(tid),
> + block,
> &vmbuffer))
> {
> /* Rats, we have to visit the heap to check visibility */
> if (!index_fetch_heap(index_scan, tableslot))
> continue; /* no visible tuple, try next index entry */
>
> + {
> + CHECK_FOR_INTERRUPTS();
> + if (block != last_block)
> + visited_pages++;
> +#define VISITED_PAGES_LIMIT 100
> + if (visited_pages > VISITED_PAGES_LIMIT)
> + break;
> + else
> + continue; /* no visible tuple, try next index entry */
> + }
> +
> /* We don't actually need the heap tuple for anything */
> ExecClearTuple(tableslot);
>
> --
> 2.30.2
This can't quite be right - isn't this only applying the limit if we found a
visible tuple?
Greetings,
Andres Freund
From | Date | Subject | |
---|---|---|---|
Next Message | Justin Pryzby | 2022-11-21 17:34:31 | Re: Damage control for planner's get_actual_variable_endpoint() runaway |
Previous Message | Tom Lane | 2022-11-21 17:24:17 | Re: pgsql: Prevent instability in contrib/pageinspect's regression test. |