Re: xid wraparound

From: Greg Smith <greg(at)2ndquadrant(dot)com>
To: Mark Rostron <mrostron(at)ql2(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "pgsql-admin(at)postgresql(dot)org" <pgsql-admin(at)postgresql(dot)org>
Subject: Re: xid wraparound
Date: 2010-09-27 19:02:30
Message-ID: 4CA0EA46.6090006@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Mark Rostron wrote:
> # select relname, age(relfrozenxid), relfrozenxid FROM pg_class WHERE relkind = 'r' and relname = 'error';
> relname | age | relfrozenxid
> ---------+-----------+--------------
> error | 286569433 | 3781443077
>
> autovacuum_freeze_max_age is the default of 200m,
> so I assume age(relfrozenid) triggered the autovac processing we are currently seeing?
>

Looks that way. The anti-wraparound work starts long before there is
any danger of wraparound; only 10% of the way as you've seen here. The
idea is that this gives you plenty of time to work through VACUUM even
on a very large table, which is the situation you're in now.

> Also, maintenance_work_mem is 256MB.
> And the table size is 132GB.
> Should we increase maintenance_work_memory?
> if we increase maintenance_work_memory and reload,
> will the autovacuum workers pick up the change on the fly?
> I assume that killing the auto-vacuum workers is not a good idea?
> If we do, would auto-vac restart, with the increased memory allocation?
>

Here's how you check that sort of thing:

postgres=# select name,context from pg_settings where
name='maintenance_work_mem';
name | context
----------------------+---------
maintenance_work_mem | user

This shows that maintenance_work_mem will pick up a change each time a
new user session starts, so no need for a full server restart. So long
as you do a regular kill, and not "kill -9", it shouldn't be dangerous
to kill the AV workers. You can expect them to turn around and start
right back up again though, doing the same job; make any server
parameter changes active before killing them. Also, some additional
logging you probably want to turn on here:

log_autovacuum_min_duration log_checkpoints

And take a look at all the data for this table in pg_stat_user_tables ,
which will show you a variety of vacuum and autovacuum influencing data.

If you have the RAM, increasing this parameter should help vacuum out.
But your current setting is big enough that it shouldn't be limiting
things too badly, and from the slow rate of progress you're seeing, it
sounds more like you're hitting some sort of disk bottleneck instead.
Either that, or your autovacuum cost parameters are really restricting
the activity of the workers to a minimum.

If you are just suffering from general system performance limits here,
you might follow some of the usual advice at
http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server to speed
things up. You can do a change to checkpoint_segments on the fly too.
shared_buffers you'll have to do a full server restart for. Those are
the main three (along with maintenance_work_mem) that impact how fast
VACUUM work progresses.

--
Greg Smith, 2ndQuadrant US greg(at)2ndQuadrant(dot)com Baltimore, MD
PostgreSQL Training, Services and Support www.2ndQuadrant.us
Author, "PostgreSQL 9.0 High Performance" Pre-ordering at:
https://www.packtpub.com/postgresql-9-0-high-performance/book

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Lukasz Brodziak 2010-09-28 07:48:00 Could not read block error question
Previous Message Lennin Caro 2010-09-27 18:39:55 Re: Old database format..