From: | Heikki Linnakangas <hlinnakangas(at)vmware(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: checking for interrupts during heap insertion |
Date: | 2014-06-23 19:30:50 |
Message-ID: | 53A8806A.1040601@vmware.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 06/23/2014 08:07 PM, Robert Haas wrote:
> While talking to Amit Kapila this morning, he mentioned to me that
> there seem to be no CHECK_FOR_INTERRUPTS() calls anywhere in
> heap_multi_insert() or the functions it calls. Should there be?
Haven't heard any complaints, but I guess..
> By way of contrast, heapgetpage() has this:
>
> /*
> * Be sure to check for interrupts at least once per page. Checks at
> * higher code levels won't be able to stop a seqscan that encounters many
> * pages' worth of consecutive dead tuples.
> */
> CHECK_FOR_INTERRUPTS();
>
> In heap_multi_insert(), we first do heap_prepare_insert() on each
> tuple, which may involve dirtying many pages, since it handles TOAST.
> Then, we loop over the tuples themselves and dirty a bunch more pages.
> All of that will normally happen pretty quickly, but if the I/O
> subsystem is very slow for some reason, such as due to heavy system
> load, then it might take quite a long time. I'm thinking we might
> want a CHECK_FOR_INTERRUPTS() in the following two places:
>
> 1. Inside toast_save_datum, at the top of the loop that starts with
> "while (data_todo > 0)".
> 2. Inside heap_multi_insert, at the top of the loop that starts with
> "while (ndone < ntuples)".
Seems reasonable.
- Heikki
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2014-06-23 19:34:25 | Re: Minmax indexes |
Previous Message | Heikki Linnakangas | 2014-06-23 19:10:39 | Re: Minmax indexes |