pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Guillaume Cottenceau <gc@mnc.ch>
To: pgsql-performance@postgresql.org
Subject: 9.2.1 & index-only scans : abnormal heap fetches after VACUUM FULL
Date: Thu, 29 Nov 2012 12:33:50 +0100
Message-ID: <m3mwy0myn5.fsf@mnc.ch> (raw)
List-Unsubscribe:  <mailto:majordomo@postgresql.org?body=unsub%20pgsql-performance>

I am toying around with 9.2.1, trying to measure/determine how
index-only scans can improve our performance.

A small script which is attached to this mail, shows that as long
as the table has been VACUUM FULL'd, there is a unusual high
amount of heap fetches. It is strange that the visibilitymap_test
predicate fails in these situations, is the visibility map
somehow trashed in this situation? It should not, or at least the
documentation[1] should state it (my understanding is that vacuum
full does *more* than vacuum, but nothing less) (note to usual
anti vacuum full trollers: I know you hate vacuum full).

Using pg 9.2.1 compiled from sources, almost standard
configuration except shared_buffers at 512M, effective_cache_size
at 1536M, random_page_cost at 2, and vacuum delays increased.

Please find complete logs attached, and selected logs below:

After table creation + analyze:

 Index Only Scan using i on ta  (cost=0.00..156991.10 rows=2018667 width=4) (actual time=0.034..336.443 rows=2000000 loops=1)
   Index Cond: (ca = 1)
   Heap Fetches: 2000000

After vacuum:

 Index Only Scan using i on ta  (cost=0.00..50882.62 rows=2018667 width=4) (actual time=0.014..193.120 rows=2000000 loops=1)
   Index Cond: (ca = 1)
   Heap Fetches: 0

After vacuum analyze:

 Index Only Scan using i on ta  (cost=0.00..50167.13 rows=1990353 width=4) (actual time=0.015..193.035 rows=2000000 loops=1)
   Index Cond: (ca = 1)
   Heap Fetches: 0

After vacuum full:

 Index Only Scan using i on ta  (cost=0.00..155991.44 rows=1990333 width=4) (actual time=0.042..364.412 rows=2000000 loops=1)
   Index Cond: (ca = 1)
   Heap Fetches: 2000000
                 ^^^^^^^ uh uh, looking bad

After vacuum full analyze:

 Index Only Scan using i on ta  (cost=0.00..157011.85 rows=2030984 width=4) (actual time=0.025..365.657 rows=2000000 loops=1)
   Index Cond: (ca = 1)
   Heap Fetches: 2000000

After vacuum:

 Index Only Scan using i on ta  (cost=0.00..51192.45 rows=2031000 width=4) (actual time=0.015..192.520 rows=2000000 loops=1)
   Index Cond: (ca = 1)
   Heap Fetches: 0

Thanks for any comments/hints,

Ref: 
[1] http://www.postgresql.org/docs/9.1/static/sql-vacuum.html
-- 
Guillaume Cottenceau

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance

Attachments:

  vacfull.sql (application/octet-stream, 715B) download

fulloutput.log (text/plain, 3.5K) download DROP TABLE ta; psql:/tmp/vacfull.sql:3: ERROR: table "ta" does not exist CREATE TABLE ta (ca int, cb int, cc int); CREATE TABLE INSERT INTO ta VALUES (generate_series(1, 5), generate_series(1, 10000000), generate_series(1, 10000000)); INSERT 0 10000000 ANALYZE ta; ANALYZE CREATE INDEX i ON ta (ca, cb, cc); CREATE INDEX EXPLAIN ANALYZE SELECT cb FROM ta WHERE ca = 1 ORDER BY cb; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ Index Only Scan using i on ta (cost=0.00..156991.10 rows=2018667 width=4) (actual time=0.034..336.443 rows=2000000 loops=1) Index Cond: (ca = 1) Heap Fetches: 2000000 Total runtime: 385.023 ms (4 rows) VACUUM ta; VACUUM EXPLAIN ANALYZE SELECT cb FROM ta WHERE ca = 1 ORDER BY cb; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Index Only Scan using i on ta (cost=0.00..50882.62 rows=2018667 width=4) (actual time=0.014..193.120 rows=2000000 loops=1) Index Cond: (ca = 1) Heap Fetches: 0 Total runtime: 241.079 ms (4 rows) VACUUM ANALYZE ta; VACUUM EXPLAIN ANALYZE SELECT cb FROM ta WHERE ca = 1 ORDER BY cb; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Index Only Scan using i on ta (cost=0.00..50167.13 rows=1990353 width=4) (actual time=0.015..193.035 rows=2000000 loops=1) Index Cond: (ca = 1) Heap Fetches: 0 Total runtime: 241.101 ms (4 rows) VACUUM FULL ta; VACUUM EXPLAIN ANALYZE SELECT cb FROM ta WHERE ca = 1 ORDER BY cb; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ Index Only Scan using i on ta (cost=0.00..155991.44 rows=1990333 width=4) (actual time=0.042..364.412 rows=2000000 loops=1) Index Cond: (ca = 1) Heap Fetches: 2000000 Total runtime: 412.715 ms (4 rows) VACUUM FULL ANALYZE ta; VACUUM EXPLAIN ANALYZE SELECT cb FROM ta WHERE ca = 1 ORDER BY cb; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ Index Only Scan using i on ta (cost=0.00..157011.85 rows=2030984 width=4) (actual time=0.025..365.657 rows=2000000 loops=1) Index Cond: (ca = 1) Heap Fetches: 2000000 Total runtime: 414.223 ms (4 rows) VACUUM ta; VACUUM EXPLAIN ANALYZE SELECT cb FROM ta WHERE ca = 1 ORDER BY cb; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Index Only Scan using i on ta (cost=0.00..51192.45 rows=2031000 width=4) (actual time=0.015..192.520 rows=2000000 loops=1) Index Cond: (ca = 1) Heap Fetches: 0 Total runtime: 240.918 ms (4 rows) DROP TABLE ta; DROP TABLE

view thread (6+ messages)  latest in thread

Message-ID: <m3mwy0myn5.fsf@mnc.ch>
Permalink:  ../m3mwy0myn5.fsf@mnc.ch/
Also on:    postgresql.org/message-id/m3mwy0myn5.fsf@mnc.ch

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: gc@mnc.ch
  Subject: Re: 9.2.1 & index-only scans : abnormal heap fetches after VACUUM FULL
  In-Reply-To: <m3mwy0myn5.fsf@mnc.ch>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox