I'm using a hosted PostgreSQL database where I don't have shell access. Is there a query I can use to check the current WAL log size?
1 Answer
If you have superuser access, you can use:
select *
from pg_ls_dir('pg_xlog');
which will return one row for each file in the directory pg_xlog
. As the size for a WAL segment is fixed, you can easily calculate the total size by multiplying the number of rows by 16MB:
select count(*) * pg_size_bytes(current_setting('wal_segment_size')) as total_size
from pg_ls_dir('pg_xlog') as t(fname)
where fname <> 'archive_status';
Alternatively you can use pg_stat_file()
to return information about the files:
select sum((pg_stat_file('pg_wal/'||fname)).size) as total_size
from pg_ls_dir('pg_xlog') as t(fname);
Starting with Postgres 10 you can use:
select sum(size)
from pg_ls_waldir()
-
1Pg 10 also provides for
pg_current_wal_flush_lsn()
,pg_current_wal_insert_lsn(),
pg_current_wal_lsn()
which you can feed topg_walfile_name()
Dec 6, 2017 at 22:27 -
please note the 16MB size is the default but could be configured to be different– Luke404Feb 9, 2021 at 13:42
-
@Luke404: good point, I have changed the query.– user1822Feb 9, 2021 at 13:47
-
3
-