我想在磁盘空间不足之前执行操作。 为此,我必须定期检查我的数据库的大小。
我可以查询数据库的大小(例如通过运行 pg_database_size( current_database()
)。问题是,postgres 文件夹本身的大小,(/var/lib/postgresql/data
) 更大。(几乎是我从查询中获得的响应大小的两倍。
编辑: 我在我的数据库上运行了几次 du -h/var/lib/postrgesql/data
和 pg_database_size()
, 当数据库有不同的数据时。
结果如下:
du -h /var/lib/postgresql/data | pg_databse_size()
-----------------------------------------------------------
3.7G |(1582MB)
5.8G |(2490MB)
6.3G |(2699MB)
7.8G |(4245MB)
8.0G |(4400MB)
8.9G |(5330MB)
58G |(41GB)
这些是来 self 的 du -h
命令的文件(运行此命令时,pg_database_size()=41 GB
du -h data/
4.0K data/pg_replslot
4.0K data/pg_wal/archive_status
16G data/pg_wal
4.0K data/pg_stat
12K data/pg_multixact/offsets
12K data/pg_multixact/members
28K data/pg_multixact
4.0K data/pg_logical/snapshots
4.0K data/pg_logical/mappings
16K data/pg_logical
12K data/pg_notify
168K data/pg_subtrans
7.4M data/base/12993
7.4M data/base/1
7.6M data/base/12994
20K data/base/pgsql_tmp
43G data/base/16384
43G data/base
40K data/pg_stat_tmp
4.0K data/pg_twophase
584K data/global
4.0K data/pg_snapshots
4.0K data/pg_commit_ts
20K data/pg_xact
4.0K data/pg_serial
4.0K data/pg_tblspc
4.0K data/pg_dynshmem
58G data/
DB的大小和/var/lib/posgresql/data
的大小有什么关系吗?
如何根据数据库大小预测数据文件夹的大小?
最佳答案
数据库大小和数据目录使用的空间之间存在相关性,但“相关性”是一个统计术语,统计数据不会告诉您当前磁盘空间是否不足。
您真正想知道的是,您是否可以根据数据库的大小来确定 PostgreSQL 数据目录的大小,对吗?
答案是否定的:PostgreSQL 数据目录中还有很多其他数据,它们与数据库大小无关。
最明显的例子是事务日志(WAL 文件),它们位于
pg_wal
子目录中(在较早的 PostgreSQL 版本中为pg_xlog
)。WAL生成量与数据库的数据修改量成正比,与数据库大小无关。
通常,WAL 大小受
max_wal_size
(旧版本中的checkpoint_segments
)限制,但这不是硬性限制。例如,如果 WAL 归档有问题,旧的和未归档的 WAL 文件将不会被删除。如果您有大量数据修改事件并且可以填满您的磁盘,它们会很快积累起来。这与您的数据库大小完全无关。第二个示例是临时文件,它们存储在数据目录的
base/pgsql_tmp
子目录中。如果此类文件不适合work_mem
RAM,则会生成此类文件以存储中间查询数据。
关于postgresql - DB的大小和/var/lib/postgresql/data的大小有什么关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461464/