Disk space usage discrepancy - Mailing list pgsql-general

From Yang Zhang
Subject Disk space usage discrepancy
Date
Msg-id BANLkTi=Ju78LGAVEZ7sXDf0qnOi3C7SfxQ@mail.gmail.com
Whole thread Raw
Responses Re: Disk space usage discrepancy
List pgsql-general
We're trying to figure out how to account for our disk space
consumption in a database.

$ sudo du -shx /var/lib/postgresql/8.4/main/
1.9G    /var/lib/postgresql/8.4/main/

But when we query Postgresql to find out how much disk space is
actually being used by the various databases, we get a total of under
600MB (the exact query we use for determining this is below, derived
from the example query in the PG documentation):

$ pg-dbspace
psql: FATAL:  database "template0" is not currently accepting connections
  1272446976 rp
   971186176 sfbox
   513794048 yang
    30326784 ch
    16400384 reviewboard
    14958592 pod
     6733824 cbkup
     5767168 redmine_default
     2138112 ibkup
     2138112 foo
     2113536 template1
     2113536 postgres

There are two databases with tablespaces on different volumes than
what /var/lib/postgresql/ is on - their PG-reported consumption is
~2.1GB, and they take up about ~1.5x more on disk:

$ df -h | fgrep /mnt
/dev/sdf              2.0G  1.4G  502M  74% /mnt/box
/dev/sdg              5.0G  2.1G  2.7G  44% /mnt/rp

We're also curious about the 1.5x overhead, but we're mainly not sure
why the rest of the database takes up 3x more than reported, even
discounting pg_xlog (which is for the entire cluster):

$ sudo -i 'du -shx /var/lib/postgresql/8.4/main/*'
1.8G    /var/lib/postgresql/8.4/main/base
816K    /var/lib/postgresql/8.4/main/global
144K    /var/lib/postgresql/8.4/main/pg_clog
28K     /var/lib/postgresql/8.4/main/pg_multixact
192K    /var/lib/postgresql/8.4/main/pg_stat_tmp
80K     /var/lib/postgresql/8.4/main/pg_subtrans
4.0K    /var/lib/postgresql/8.4/main/pg_tblspc
4.0K    /var/lib/postgresql/8.4/main/pg_twophase
4.0K    /var/lib/postgresql/8.4/main/PG_VERSION
129M    /var/lib/postgresql/8.4/main/pg_xlog
4.0K    /var/lib/postgresql/8.4/main/postmaster.opts
4.0K    /var/lib/postgresql/8.4/main/postmaster.pid
0       /var/lib/postgresql/8.4/main/server.crt
0       /var/lib/postgresql/8.4/main/server.key

Any hints?  Thanks in advance.

The queries were using:

$ type pg-dbspace
pg-dbspace is a function
pg-dbspace ()
{
    for db in $(psql -Atc 'select datname from pg_database');
    do
        printf '%12d %s\n' "$(PGDATABASE=$db pg-space total)" "$db";
    done | sort -rn
}

$ type pg-space
pg-space is a function
pg-space ()
{
    local schema=${schema:-${1:-}} flags=;
    case ${schema:-} in
        total)
            local query='select sum(bytes) from schemas' flags=-At
        ;;
        '*')
            local query='select * from tables'
        ;;
        '')
            local query='select * from schemas'
        ;;
        *)
            local query="select * from tables where _schema = '$schema'"
        ;;
    esac;
    psql $flags -c "
    with
      total as (
        select sum(pg_relation_size(oid)) from pg_class where relkind = 'r'
      ),
      basic as (
        select
          n.nspname as _schema,
          relname as _table,
          pg_relation_size(r.oid) as bytes,
          (100*pg_relation_size(r.oid)/(select * from
total))::numeric(4,1) as pct
        from pg_class r inner join pg_namespace n on (n.oid = relnamespace)
        where relkind = 'r'
      ),
      tables as (
        select
          _schema,
          _table,
          bytes,
          lpad(pg_size_pretty(bytes), 9) as size,
          pct
        from basic
        order by bytes desc
      ),
      schemas as (
        select
          _schema,
          sum(bytes) as bytes,
          lpad(pg_size_pretty(sum(bytes)::int), 9) as size,
          sum(pct) as pct
        from basic
        group by _schema
        order by bytes desc
      )
    $query;
  "
}

--
Yang Zhang
http://yz.mit.edu/

pgsql-general by date:

Previous
From: SUBHAM ROY
Date:
Subject: Number of Physical I/Os
Next
From: "Bob Pawley"
Date:
Subject: Re: Different views of remote server