From: | Simon Riggs <simon(at)2ndQuadrant(dot)com> |
---|---|
To: | Pavan Deolasee <pavan(dot)deolasee(at)gmail(dot)com> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Visibility map page pinned for too long ? |
Date: | 2012-12-03 18:58:45 |
Message-ID: | CA+U5nMLA02i3KX8oJ65_70a620DviGScMy8WebsGj1V4Qd_19w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 3 December 2012 17:37, Pavan Deolasee <pavan(dot)deolasee(at)gmail(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Simon Riggs | 2012-12-03 19:02:40 | Re: visibilitymap_count() at the end of vacuum |
Previous Message | Alvaro Herrera | 2012-12-03 18:45:03 | Re: pgsql: Add mode where contrib installcheck runs each module in a separa |