On Mon, Oct 21, 2013 at 10:54 AM, Haribabu kommi <haribabu.ko...@huawei.com> wrote: > On 20 October 2013 12:06 Amit Kapila wrote: >>On Tue, Oct 15, 2013 at 3:37 PM, Haribabu kommi <haribabu.ko...@huawei.com> >>wrote: >>> On 12 October 2013 11:30 Tom Lane wrote: >>>>Haribabu kommi <haribabu.ko...@huawei.com> writes: >>> >>>>Another way to look at it is that we want to keep any increments to >>>>n_dead_tuples that occur after VACUUM takes its snapshot. Maybe we could >>>>have VACUUM copy the n_dead_tuples value as it exists when VACUUM starts, >>>>and then send that as the value to subtract when it's done? >>> >>> Taking of n_dead_tuples copy and pass the same at the vacuum end to >>> subtract from table stats may not be correct, as vacuum may not be cleaned >>> all the dead tuples because of tuple visibility To other transactions. How >>> about resets the n_dead_tuples as zero if it goes negative because of >>> errors? > >>Wouldn't the way you are planing to change n_dead_tuples create inconsistency >>for n_live_tuples and n_dead_tuples, because it would have counted non >>deleted tuples as n_live_tuples as per below code: >> >>if (tupgone) >>{ >>.. >>tups_vacuumed += 1; >>has_dead_tuples = true; >>} >>else >>{ >>num_tuples += 1; >>hastup = true; >>.. >>} >> >>So now if we just subtract tuples_deleted from n_dead_tuples, it will count >>the tuples deleted during vacuum both as live tuples and dead tuples. >>There is one statistics for dead row version's that cannot be removed >>(nkeep), if we could use that to estimate total remaining dead tuples, then >>the solution can be inline with Tom's suggestion (What >>would make more sense to me is for VACUUM to estimate the number of remaining >>dead tuples somehow and send that in its message.). > > Yes, it's correct. "nkeep" counter have the dead tuples which are recently > dead and are not vacuumed. The removal of tuples vacuumed from dead tuples > should be the same as "nkeep" counter. > So if we remove the nkeep from num_tuples which gives us the proper live > tuples. How about following statement at the end scan for all blocks. > > num_tuples -= nkeep;
Actually what I had in mind was to use nkeep to estimate n_dead_tuples similar to how num_tuples is used to estimate n_live_tuples. I think it will match what Tom had pointed in his response (>>>>What would make more sense to me is for VACUUM to estimate the number >>>>of remaining dead tuples somehow and send that in its message. However, >>>>since the whole point here is that we aren't accounting for transactions >>>>that commit while VACUUM runs, it's not very clear how to do that.) With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers