Received: from localhost (maia-5.hub.org [200.46.204.182]) by postgresql.org (Postfix) with ESMTP id 340C29FBB83 for ; Wed, 21 Feb 2007 15:06:03 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.182]) (amavisd-new, port 10024) with ESMTP id 63257-08 for ; Wed, 21 Feb 2007 15:05:57 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from tinlc.com (unknown [72.18.206.65]) by postgresql.org (Postfix) with ESMTP id BE52A9FA59C for ; Wed, 21 Feb 2007 15:05:58 -0400 (AST) Received: from [127.0.0.1] (helo=localhost) by tinlc.com with smtp (Exim 4.60) (envelope-from ) id 1HJwq6-0008QH-R2; Wed, 21 Feb 2007 14:09:18 -0500 From: "Greg Sabino Mullane" To: pgsql-performance@postgresql.org Subject: Re: How to avoid vacuuming a huge logging table X-PGP-Key: 2529 DF6A B8F7 9407 E944 45B4 BC9B 9067 1496 4AC8 X-Request-PGP: http://www.biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8 In-Reply-To: Date: Wed, 21 Feb 2007 19:08:58 -0000 X-Mailer: JoyMail 2.01 Message-ID: X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.186 tagged_above=0 required=5 tests=AWL, BAYES_50, FORGED_RCVD_HELO X-Spam-Level: X-Archive-Number: 200702/217 X-Sequence-Number: 23271 -----BEGIN PGP SIGNED MESSAGE----- Hash: RIPEMD160 > Take a really different approach. Log in CSV format to text files > instead, And only import the date ranges we need "on demand" if a report > is requested on the data. Seems like more work than a separate database to me. :) > 2. We could find a way to exclude the table for vacuuming, and let it > grow even larger. Putting the table in it's own database would > accomplish that, but it would nice to avoid the overhead of a second > database connection. Specific exclusions is generally what I've done for similar problems in the past. If you can live without the per-database summary at the end of the vacuum, you can do something like this: SET search_path = 'pg_catalog'; SELECT set_config('search_path', current_setting('search_path')||','||quote_ident(nspname),'false') FROM pg_namespace WHERE nspname <> 'pg_catalog' ORDER BY 1; \t \o pop SELECT 'vacuum verbose analyze '||quote_ident(relname)||';' FROM pg_class WHERE relkind = 'r' AND relname <> 'ginormous_table' ORDER BY 1; \o \i pop Or put any tables you don't want vacuumed by this script into their own schema: ... SELECT 'vacuum verbose analyze '||quote_ident(relname)||';' FROM pg_class c, pg_namespace n WHERE relkind = 'r' AND relnamespace = n.oid AND nspname = 'novac' ORDER BY 1; ... Just flip the equality operator, and you've got a way to vacuum just those excluded tables, for example once a week during a slow time. - -- Greg Sabino Mullane greg@turnstep.com End Point Corporation PGP Key: 0x14964AC8 200702211402 http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8 -----BEGIN PGP SIGNATURE----- iD8DBQFF3JeivJuQZxSWSsgRA7LZAKC7Sfz4XBTAfHuk1CpR+eBl7ixBIACeML8N 1W2sLLI4HMtdyV4EOoh2XkY= =eTUi -----END PGP SIGNATURE-----