Обсуждение: Execute VACUUM FULL when DB touches a specific size ?
Hi, I wish to execute VACUUM FULL when DB touches a specific size. How to do it ? I'm aware about the caveats of VACUUM FULL. -- Nilesh Govindarajan Site & Server Administrator www.itech7.com मेरा भारत महान ! मम भारत: महत्तम भवतु !
On Sun, Apr 4, 2010 at 8:21 PM, Nilesh Govindarajan <lists@itech7.com> wrote: > Hi, > > I wish to execute VACUUM FULL when DB touches a specific size. How to do it > ? > > I'm aware about the caveats of VACUUM FULL. > Write a bash script that cds to the data dir and runs du -s, grabs the value, and if it's over a certain size then run vacuum full.
On 04/05/10 08:54, Scott Marlowe wrote: > On Sun, Apr 4, 2010 at 8:21 PM, Nilesh Govindarajan<lists@itech7.com> wrote: >> Hi, >> >> I wish to execute VACUUM FULL when DB touches a specific size. How to do it >> ? >> >> I'm aware about the caveats of VACUUM FULL. >> > > Write a bash script that cds to the data dir and runs du -s, grabs the > value, and if it's over a certain size then run vacuum full. That's what I was thinking to do, but how do I distinguish between the databases ? The datadir/base seems have directories whose names are numbers. -- Nilesh Govindarajan Site & Server Administrator www.itech7.com मेरा भारत महान ! मम भारत: महत्तम भवतु !
> That's what I was thinking to do, but how do I distinguish between the databases ? The datadir/base seems have directorieswhose names are numbers. Use pg_database_size function to get the size of DB. You can create a plpgsql function, which you can schedule using pgagent Or If you are writing Bash script capture the return value of pg_database_size function, in some variable and perform vacuum. Thanks & Regards, Vibhor Kumar (PCP & OCP) ITIL V3 Cerftified. On 05-Apr-2010, at 9:38 AM, Nilesh Govindarajan wrote: > On 04/05/10 08:54, Scott Marlowe wrote: >> On Sun, Apr 4, 2010 at 8:21 PM, Nilesh Govindarajan<lists@itech7.com> wrote: >>> Hi, >>> >>> I wish to execute VACUUM FULL when DB touches a specific size. How to do it >>> ? >>> >>> I'm aware about the caveats of VACUUM FULL. >>> >> >> Write a bash script that cds to the data dir and runs du -s, grabs the >> value, and if it's over a certain size then run vacuum full. > > > > -- > Nilesh Govindarajan > Site & Server Administrator > www.itech7.com > मेरा भारत महान ! > मम भारत: महत्तम भवतु ! > > -- > Sent via pgsql-admin mailing list (pgsql-admin@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-admin
Le 05/04/2010 06:08, Nilesh Govindarajan a écrit :
> On 04/05/10 08:54, Scott Marlowe wrote:
>> On Sun, Apr 4, 2010 at 8:21 PM, Nilesh Govindarajan<lists@itech7.com>
>> wrote:
>>> Hi,
>>>
>>> I wish to execute VACUUM FULL when DB touches a specific size. How to
>>> do it
>>> ?
>>>
>>> I'm aware about the caveats of VACUUM FULL.
>>>
>>
>> Write a bash script that cds to the data dir and runs du -s, grabs the
>> value, and if it's over a certain size then run vacuum full.
>
> That's what I was thinking to do, but how do I distinguish between the
> databases ? The datadir/base seems have directories whose names are
> numbers.
>
You can find the number with a simple query (SELECT oid FROM pg_database
WHERE datname='your database name') or with the oid2name contrib module.
But that's not the real issue. If you have objects of this database in
other tablespaces, "du -sh" on datadir/base/<oid> won't count them. You
should better use this query:
SELECT pg_database_size('your database name')
to get the total size of your database.
--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com