Обсуждение: Followup Question about Vacuum from newsgroup

Поиск
Список
Период
Сортировка

Followup Question about Vacuum from newsgroup

От
HT Levine
Дата:
My apologies if this posted twice...
 
HI All,
 
I found the following posting about Vacuum in the postgres.admin newsgroup (see below my question)
 
I have the same problem:   We are using HUGE amounts of diskspace in our production database, but the standby (created daily from a pgdump / pg_restore of our production server)   is about 1/2 the size.
 
We have a base of about 4 million users so our datafiles are pretty big.  I shut the site down and did a VACUUM ANALYZE VERBOSE <tablename>  of 2 of the largest tables.   It took over 4 hours.     When it was all said and done,  disk utilization had gone UP.
 
My suspicion is that there are pg_toast_xxxxx files left in the base directory?    If I identify them with oid2name (waiting for netops to build that)    is it ok to just delete those toast files?    This is the most crucial part of our revenue year (tons of christmas shoppers buying tons)  so we absolutely can't have any down time or corruption.
 
Any advice or links to documentation that covers this specifically would be most helpful.
 
thanks
 
-----------------------  start newsgroup posting ------------------------------------
 
 
Author: Morten Guldager <PostgreSQL-admin@mogul.dk>
Date: Wed 16 Oct 15:09:40 2002 CDT
Subject: Re: [ADMIN] VACUUM FULL fails to free diskspacef
Thread: 2 messages
On 2002.10.16 20:18 Bruce Momjian wrote:
> Morten Guldager wrote:
> >
> > My database cluster have one database with one table. (if we don't
> > count template0 and 1.
> >
> > My table has 3 collumns, 2 ints and a bytea. 2.5M rows and it
> consumes
> > 150G diskspace. I have a unique index on the 2 ints.
> >
> > I did a TRUNCATE on the table, and a VACUUM FULL.
> >
> > But PostgreSQL-7.2.3 did not return the space to the filesystem.
> (ext3
> > on linux)
>
> That is interesting.  I originally thought maybe the indexes aren't
> truncated, but it looks like that is happening.  Please try
> /contrib/oid2name to find which files are taking the space.

Ok, never used oid2name before, but here we go:

I located a datafile which must be one of the files holding the
non-freed space, it is 1073741824 bytes big.

It is: $PGDATA/base/16556/20048694

Next I did a: (mogul is the name of my database)

$ oid2name -d mogul -o 20048694
Tablename of oid 20048694 from database "mogul":
---------------------------------
20048694 = pg_toast_20048692

and then:

$ oid2name -d mogul -o 20048692
Tablename of oid 20048692 from database "mogul":
---------------------------------
20048692 = regninger

And "regninger" is the name of the table I just truncated.

I have tried to drop the indexes, that does not help.

If I drop the database the space do get freed.
---------------------  end newsgroup posting -----------------
 

Re: Followup Question about Vacuum from newsgroup

От
Tom Lane
Дата:
HT Levine <htlevine@ebates.com> writes:
> My suspicion is that there are pg_toast_xxxxx files left in the base
> directory?    If I identify them with oid2name (waiting for netops to build
> that)    is it ok to just delete those toast files?

No.

In pre-7.3 releases, TRUNCATE TABLE did not automatically truncate the
associated TOAST table, which was a nasty oversight :-(.  However, those
releases would also allow you to manually truncate a TOAST table (which
was also a bad oversight, but rather fortunate in hindsight).  The bad
news is that they think TOAST tables are system tables --- so the only
way to fully truncate a toastable table in 7.2 is

    TRUNCATE TABLE toast-table-for-foo;
    TRUNCATE TABLE foo;

in a standalone backend started with -O option :-(

This mess is fixed in 7.3 --- TRUNCATE automatically truncates the toast
table along with its master, when you truncate the master.

            regards, tom lane

Re: Followup Question about Vacuum from newsgroup

От
"HT"
Дата:
Now here's a little more information.  I did this VACUUM on a table which
was NOT truncated.  It has many additions and updates, but very few if any
deletions.  In this case, did I have anything to gain with VACUUM?  Does the
thing about the toast files still hold?    same instructions below?   Thanks
so much!


"Tom Lane" <tgl@sss.pgh.pa.us> wrote in message
news:21502.1039988725@sss.pgh.pa.us...
> HT Levine <htlevine@ebates.com> writes:
> > My suspicion is that there are pg_toast_xxxxx files left in the base
> > directory?    If I identify them with oid2name (waiting for netops to
build
> > that)    is it ok to just delete those toast files?
>
> No.
>
> In pre-7.3 releases, TRUNCATE TABLE did not automatically truncate the
> associated TOAST table, which was a nasty oversight :-(.  However, those
> releases would also allow you to manually truncate a TOAST table (which
> was also a bad oversight, but rather fortunate in hindsight).  The bad
> news is that they think TOAST tables are system tables --- so the only
> way to fully truncate a toastable table in 7.2 is
>
> TRUNCATE TABLE toast-table-for-foo;
> TRUNCATE TABLE foo;
>
> in a standalone backend started with -O option :-(
>
> This mess is fixed in 7.3 --- TRUNCATE automatically truncates the toast
> table along with its master, when you truncate the master.
>
> regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org