postgresql - DB的大小和/var/lib/postgresql/data的大小有什么关系

标签 postgresql

我想在磁盘空间不足之前执行操作。 为此,我必须定期检查我的数据库的大小。

我可以查询数据库的大小(例如通过运行 pg_database_size( current_database() )。问题是,postgres 文件夹本身的大小,(/var/lib/postgresql/data) 更大。(几乎是我从查询中获得的响应大小的两倍。

编辑: 我在我的数据库上运行了几次 du -h/var/lib/postrgesql/datapg_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/

相关文章:

sql - 选择进入表计数

spring - 无法为数据库添加 SSL 支持

django - 在 Django ORM 中重用子查询进行排序

postgresql - 可以 SELECT ... NOWAIT "deadlock"吗?

postgresql - 无法通过 CLI 将本地迁移推送到 Supabase

ruby-on-rails - 将 ActiveRecord 查询转换为 PostgreSQL 查询

sql - 使用 CTE 对查询结果进行分组

sql - Postgres : SELECT column name based on Boolean value

sql - 获取多对多关系的聚合 View

oracle - 双向复制 SymmetricDS