Hi Manuel

Sorry for the late reply saw this email just today. Anyways how about using
something like?

postgres=# SELECT
postgres-#     pg_size_pretty(pg_database_size('postgres')) AS
database_size,
postgres-#     pg_size_pretty(pg_total_relation_size('accounts')) AS
table_size,
postgres-#     pg_size_pretty(tuple_len) AS live_tuple_size,
postgres-#     pg_size_pretty(dead_tuple_len) AS dead_tuple_size,
postgres-#     pg_size_pretty(free_space) AS free_space
postgres-# FROM
postgres-#     pgstattuple('accounts');
 database_size | table_size | live_tuple_size | dead_tuple_size |
free_space
---------------+------------+-----------------+-----------------+------------
 8500 kB       | 40 kB      | 80 bytes        | 80 bytes        | 7988 bytes
(1 row)


Thanks and regards
Semab


On Tue, Jul 16, 2024 at 4:38 PM Shenavai, Manuel <manuel.shena...@sap.com>
wrote:

> Thanks for the suggestion. I think this will not help us to differentiate
> between live tuples, dead tuples and free space.
>
>
>
> Best regards,
>
> Manuel
>
>
>
> *From:* Torsten Förtsch <tfoertsch...@gmail.com>
> *Sent:* 15 July 2024 18:59
> *To:* Shenavai, Manuel <manuel.shena...@sap.com>
> *Cc:* pgsql-general@lists.postgresql.org
> *Subject:* Re: Monitoring DB size
>
>
>
> Slightly different approach than you might expect. For larger DBs you'd
> likely want to exclude base and instead use pg_database_size() in addition.
>
>
>
> postgres(2454884) =# create temp table xx(dir text, sz bigint);
> CREATE TABLE
> Time: 2.587 ms
> postgres(2454884) =# copy xx(sz, dir) from program 'du -s *';
>
> COPY 21
> Time: 3.793 ms
> postgres(2454884) =# select * from xx;
>         dir          |  sz
> ----------------------+-------
> base                 | 26280
> global               |   568
> pg_commit_ts         |    12
> pg_dynshmem          |     4
> pg_logical           |    16
> pg_multixact         |    28
> pg_notify            |     4
> pg_replslot          |     4
> pg_serial            |     4
> pg_snapshots         |     4
> pg_stat              |     4
> pg_stat_tmp          |     4
> pg_subtrans          |    12
> pg_tblspc            |     4
> pg_twophase          |     4
> PG_VERSION           |     4
> pg_wal               | 16392
> pg_xact              |    12
> postgresql.auto.conf |     4
> postmaster.opts      |     4
> postmaster.pid       |     4
> (21 rows)
>
> Time: 0.282 ms
>
>
>
> On Mon, Jul 15, 2024 at 4:42 PM Shenavai, Manuel <manuel.shena...@sap.com>
> wrote:
>
> Hi everyone,
>
>
>
> we currently capture the db size (pg_database_size) which gives the “Disk
> space used by the database with the specified name”. Is it possible to
> further split this data how much space is occupied by live tuples, dead
> tuples and free space?
>
>
>
> We would like to have something like:
>
> DB Size: 200 MB, live tuple 100MB, Dead Tuple: 20 MB, free space 80MB
>
>
>
> Is this possible?
>
>
>
> Best regards,
>
> Manuel
>
>

Reply via email to