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 1
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()
Evan Carroll– Evan Carroll2017年12月06日 22:27:00 +00:00Commented Dec 6, 2017 at 22:27 -
1please note the 16MB size is the default but could be configured to be differentLuke404– Luke4042021年02月09日 13:42:16 +00:00Commented Feb 9, 2021 at 13:42
-
@Luke404: good point, I have changed the query.user1822– user18222021年02月09日 13:47:43 +00:00Commented Feb 9, 2021 at 13:47
-
4what's the unit for each query? Bytes?Alex– Alex2021年03月18日 00:59:48 +00:00Commented Mar 18, 2021 at 0:59
-
3Use
pg_size_pretty(sum(size))
for human-readable.Alexi Theodore– Alexi Theodore2024年06月11日 22:04:33 +00:00Commented Jun 11, 2024 at 22:04