是否有查询来检查 PostgreSQL 中的当前 WAL 大小?

Ant*_*och 3 postgresql postgresql-9.6

我使用的是托管的 PostgreSQL 数据库,但我没有 shell 访问权限。是否有可以用来检查当前 WAL 日志大小的查询?

a_h*_*ame 11

如果您有超级用户访问权限,则可以使用:

select * 
from pg_ls_dir('pg_xlog');
Run Code Online (Sandbox Code Playgroud)

这将为目录中的每个文件返回一行pg_xlog。由于 WAL 段的大小是固定的,您可以通过将行数乘以 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';
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用pg_stat_file()返回有关文件的信息:

select sum((pg_stat_file('pg_wal/'||fname)).size) as total_size
from pg_ls_dir('pg_xlog') as t(fname);
Run Code Online (Sandbox Code Playgroud)

从 Postgres 10 开始,您可以使用:

select sum(size) 
from pg_ls_waldir()
Run Code Online (Sandbox Code Playgroud)

  • 每个查询的单位是什么?字节? (4认同)