Re: Monitoring DB size - Mailing list pgsql-general

From semab tariq
Subject Re: Monitoring DB size
Date
Msg-id CAG=z8NQZWSNn6gouOy=ZgaidPy-nABNiFu65YtZZtVZNUe-YHA@mail.gmail.com
Whole thread Raw
In response to RE: Monitoring DB size  ("Shenavai, Manuel" <manuel.shenavai@sap.com>)
List pgsql-general
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.shenavai@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 <tfoertsch123@gmail.com>
Sent: 15 July 2024 18:59
To: Shenavai, Manuel <manuel.shenavai@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.shenavai@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

pgsql-general by date:

Previous
From: Jim Vanns
Date:
Subject: Re: Suggestions to overcome 'multixact "members" limit exceeded' in temporary tables
Next
From: Piotr Andreassen Blasiak
Date:
Subject: Logical replication slots on slaves/replicas?