checking for interrupts during heap insertion
От | Robert Haas |
---|---|
Тема | checking for interrupts during heap insertion |
Дата | |
Msg-id | CA+Tgmoa8mubXrw54T+uELOd=6eMDAXe0DM8m7WdSUyRQCJ6QVA@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: checking for interrupts during heap insertion
|
Список | pgsql-hackers |
Hi, 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? 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 stopa 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)". Thoughts? -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
В списке pgsql-hackers по дате отправления: