Hi All, Thank you for the prompt reply on this.
Please find the output of the top command and the process availabe. Could explain what logger process is here for top - 12:41:57 up 17:51, 3 users, load average: 0.00, 0.04, 0.01 Tasks: 141 total, 1 running, 139 sleeping, 0 stopped, 1 zombie Cpu(s): 0.3%us, 1.4%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1417256k total, 1300888k used, 116368k free, 41468k buffers Swap: 2097144k total, 22156k used, 2074988k free, 1017980k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 23466 postgres 15 0 4664 1508 1228 S 0.0 0.1 0:00.10 -bash 25983 postgres 15 0 44620 3032 2680 S 0.0 0.2 0:00.43 /usr/local/pgsql/bin/postgres 25984 postgres 18 0 8608 632 296 S 0.0 0.0 0:00.04 postgres: logger process 25986 postgres 15 0 44604 1656 1292 S 0.0 0.1 0:00.10 postgres: writer process 25987 postgres 15 0 44604 932 588 S 0.0 0.1 0:00.11 postgres: wal writer process 25988 postgres 15 0 44756 1232 680 S 0.0 0.1 0:00.17 postgres: autovacuum launcher process 25989 postgres 18 0 8604 648 304 S 0.0 0.0 0:00.04 postgres: archiver process 25990 postgres 15 0 8740 900 408 S 0.0 0.1 0:00.31 postgres: stats collector process 25993 postgres 15 0 4964 1464 1196 S 0.0 0.1 0:00.17 psql 25994 postgres 15 0 46264 6212 4672 S 0.0 0.4 0:00.23 postgres: postgres postgres [local] idle Regards Raghavendra On Fri, Mar 26, 2010 at 9:22 AM, Scott Marlowe <scott.marl...@gmail.com>wrote: > On Thu, Mar 25, 2010 at 9:03 PM, Tadipathri Raghu <traghu....@gmail.com> > wrote: > > Hi Scott, Thomas, > > > > Thank you for the update. > > > >> > >> >> Oracle uses a completely different implementation of MVCC > architecture. > >> >> It > >> >> overwrites the data and then uses rollback segments to provide > >> >> 'previous > >> >> versions' to running transactions etc. > >> >> > >> >> PostgreSQL does not overwrite the data - it just creates a copy of > the > >> >> row > >> >> and then decides which version should each session see (depending on > >> >> the > >> >> transaction IDs etc.). So it does not need to do rollbacks the way > >> >> Oracle > >> >> does, but it has to remove stale copies of the rows (such that no > >> >> running > >> >> transaction can see) - that's why there is VACUUM. > >> > > >> > > >> > Here, if you have issued a command pg_start_backup() at that time the > >> > cluster is freezed, and if any transaction takes place before the > >> > pg_stop_backup() issued at that time where the transaction data will > be > >> > kept > >> > if the undo's are not there. > >> > >> > >> What do you mean by 'freezed'? The cluster operates normally, the > >> pg_start_backup() just creates a backup label (and performs a > checkpoint), > >> but that's not a problem. OK, there could be a performance decrease > >> because of full page writes, but the data will be processed as if there > is > >> no backup running. PostgreSQL does not need the checkpoints to perform > >> backup. > > > >> The 'UNDO' data is just kept in the main data files. Then, based on > what > >> your xid is, and the xmin / xmax on each row, it's either visible or > not. > >> That's what vacuum does, clean up the rows that are for 'undo' and can > >> never been seen anymore. The REDO itself is kept in the transaction > logs. > > > > > >> > >> Like Thomas says, the pg_start_backup() just creates a label that tells > >> the restoring database what pg_xlog record to start with when you > 'restore' > >> your data. The 'UNDO' type of data (just the old rows actually) is just > >> kept in the main table until vacuum nukes 'em. > > > > --Scott > > Q1. Does vacuum process come into existence even you turn off the > > autovacuum.? What is the main work for vacuum process, to the clean the > > buffers or work only when autovacuum in on and to clean up the rows that > are > > 'undo' > > 1a: Yes, if you are approaching transaction id wraparound (txid wrap) > then autovacuum will crank up a vacuum to fix that situation whether > you like it or not. The alternative is db shutdown. > 1b: The main job of vacuum is to free dead tuples, which postgresql > accumulates as it updates or deletes tuples. When you have several old > versions of a tuple to collect, vacuum recycles the space and makes it > available to other updates to now use instead of allocating on the end > of the relation. > > > Q2. Do you mean to say there is a vacuum process which will clean up the > > buffers that are for 'undo'? > > No buffers for undo. It's all stored on disc, ready for instant > access. Try it on a test db. begin; load a table with 1M rows; > rollback; sub second response. A million changes just disappeared > instantly. And now you've got 1M dead tuples in that table. Vacuum's > job is to make them available for re-use. But they're all in one big > consecutive file so the performance is actually pretty good as the > table repopulates, especially if it'll get back up to 1M records again > in the near future. As long as it got vacuumed. > > > Q3. Fine, if the vacuum is off then your data files will hold the undo > data > > also in it? > > Yep. Until a forced vacuum due to txid wrap occurs. >