database - Postgres DB 大小是预期的 3 倍
问题描述
每天晚上,我们都会截断数据库中的大部分表并从远程数据库中插入数据。我们每晚插入的数据总大小约为 300 GB。
问题是数据库大小要大得多:
SELECT pg_size_pretty( pg_database_size('comb') );
pg_size_pretty
----------------
943 GB
(1 row)
此外,data/base 目录中有很多旧文件(例如从 2020 年开始)没有出现在 pg_class 中:
cd data/base
ll 935829*
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.1
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.2
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.3
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.4
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.5
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.6
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.7
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.8
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.9
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.10
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.11
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.12
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.13
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.14
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.15
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.16
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.17
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.18
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.19
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.20
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.21
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.22
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.23
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.24
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.25
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.26
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.27
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.28
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.29
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.30
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.31
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.32
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.33
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.34
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.35
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.36
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.37
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.38
-rw------- 1 postgres postgres 1073741824 Sep 4 2020 935829.39
SELECT relname, relnamespace::regnamespace, relkind FROM pg_class WHERE relfilenode = 935829;
relname | relnamespace | relkind
---------+--------------+---------
(0 rows)
Time: 8.156 ms
我们尝试执行 VACUUM FULL 以将未使用的空间释放给操作系统。它成功完成,但没有为操作系统释放空间。
上次发生这种情况时,我们执行了逻辑备份 (pg_dump) 并还原以缩小该数据库。
这次我们想弄清楚这个问题的原因。
请指教。
解决方案
首先,找出文件是否属于现有关系(假设关系在默认表空间中):
SELECT pg_filenode_relation(0, 935829);
如果结果为 NULL,并且文件是旧的,您可以删除它们。
他们一定是在坠机后被抛在后面的。
推荐阅读
- node.js - 无法使用 express 获取我的实际公共 IP
- google-cloud-functions - 不同项目中的云存储桶触发云功能
- matlab - 为什么带有 fitcsvm 的 SMO 求解器需要比 L1-QP 求解器更长的时间才能收敛到 MATLAB 中较大的 BoxConstraint (C) 值?
- amazon-web-services - aws s3 cp 从 jenkins 工作区到不同 aws 帐户上的 ec2 工作区
- amazon-web-services - 如何在 Cloud9 IDE 中预览 HTML/CSS 文件?
- powershell - PowerShell中的数据操作\重复数据删除
- typescript - 有人可以帮我自动化多用户用例在量角器中吗?
- java - Appium测试无法识别Opencv4nodejs
- python - ModuleNotFoundError:Windows 的 PyCharm 中没有名为“folderB”的模块(附加项目)
- wpf - WPF .NET Core 3.1 的网络摄像头