Re: Visibility map page pinned for too long ? - Mailing list pgsql-hackers

From Simon Riggs
Subject Re: Visibility map page pinned for too long ?
Date
Msg-id CA+U5nMLA02i3KX8oJ65_70a620DviGScMy8WebsGj1V4Qd_19w@mail.gmail.com
Whole thread Raw
In response to Visibility map page pinned for too long ?  (Pavan Deolasee <pavan.deolasee@gmail.com>)
List pgsql-hackers
On 3 December 2012 17:37, Pavan Deolasee <pavan.deolasee@gmail.com> wrote:
> I was looking at the code when the following tiny bit caught my attention.
> In vacuumlazy.c, we release the pin on the final VM page at line number 972.
>
>  954     if (vacrelstats->num_dead_tuples > 0)
>  955     {
>  956         /* Log cleanup info before we touch indexes */
>  957         vacuum_log_cleanup_info(onerel, vacrelstats);
>  958
>  959         /* Remove index entries */
>  960         for (i = 0; i < nindexes; i++)
>  961             lazy_vacuum_index(Irel[i],
>  962                               &indstats[i],
>  963                               vacrelstats);
>  964         /* Remove tuples from heap */
>  965         lazy_vacuum_heap(onerel, vacrelstats);
>  966         vacrelstats->num_index_scans++;
>  967     }
>  968
>  969     /* Release the pin on the visibility map page */
>  970     if (BufferIsValid(vmbuffer))
>  971     {
>  972         ReleaseBuffer(vmbuffer);
>  973         vmbuffer = InvalidBuffer;
>  974     }
>
> So we are holding the pin right through the index vacuuming and the second
> pass over the heap; both can take a very long time. We can and should really
> be releasing the pin *before* those steps. In fact, it would be appropriate
> to do it right after the preceding big for-loop.
>
> While it may or may not matter from the performance or correctness
> perspective, I think we should fix that.

Yes, its a clear bug. Patched.

-- Simon Riggs                   http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services



pgsql-hackers by date:

Previous
From: Pavan Deolasee
Date:
Subject: Re: visibilitymap_count() at the end of vacuum
Next
From: Simon Riggs
Date:
Subject: Re: visibilitymap_count() at the end of vacuum