Vacuum Full 无法删除文件,因为磁盘已满,剩余 5g 可用空间

Vacuum Full 无法删除文件,因为磁盘已满,剩余 5g 可用空间

我最近磁盘空间不足。我从 CMS 数据库中删除了一些旧数据行。我注意到可用磁盘空间没有按预期增长。我在 serverfault 中搜索并找到了该VACUUM FULL;命令。

不幸的是,由于磁盘已满,我无法运行此命令。

这是我的日志:

postgres@Ubuntu-1510-wily-64-minimal:~$ psql -d cms
psql (9.4.6)
Type "help" for help.

cms=# auto vacuum
cms-# ;
ERROR:  syntax error at or near "auto"
LINE 1: auto vacuum
        ^
cms=# VACUUM FULL;
ERROR:  could not extend file "base/80180/114991.6": No space left on device
HINT:  Check free disk space.
cms=# \q
postgres@Ubuntu-1510-wily-64-minimal:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            985M     0  985M   0% /dev
tmpfs           201M   26M  175M  13% /run
/dev/sda1        47G   39G  5.8G  87% /
tmpfs          1001M  8.0K 1001M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs          1001M     0 1001M   0% /sys/fs/cgroup
tmpfs           201M     0  201M   0% /run/user/0
postgres@Ubuntu-1510-wily-64-minimal:~$ psql -d cms
psql (9.4.6)
Type "help" for help.

cms=# VACUUM FULL;
ERROR:  could not extend file "base/80180/115638.5": No space left on device
HINT:  Check free disk space.
cms=# \q
postgres@Ubuntu-1510-wily-64-minimal:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            985M     0  985M   0% /dev
tmpfs           201M   26M  175M  13% /run
/dev/sda1        47G   39G  5.7G  88% /
tmpfs          1001M  8.0K 1001M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs          1001M     0 1001M   0% /sys/fs/cgroup
tmpfs           201M     0  201M   0% /run/user/0
postgres@Ubuntu-1510-wily-64-minimal:~$ psql -d cms
psql (9.4.6)
Type "help" for help.

cms=# VACUUM FULL;
ERROR:  could not extend file "base/80180/115660.5": No space left on device
HINT:  Check free disk space.
cms=#

我现在很困惑。我有 5.7 GB 的可用空间,但无法释放更多空间,因为磁盘已满。

任何想法?

答案1

操作系统保留一部分磁盘空间用于碎片整理和管理使用,因为 postgresql 不以 root 身份运行,因此它无权访问最后 5% 9 或其他任何空间)

要解决这个问题,您需要释放一些空间,也许您可​​以暂时将一些不相关的文件从系统中移出(例如日志文件)

删除所有索引(和外键约束)可能会释放足够的磁盘空间。然后重建索引(pg_dump --schmea-only 除其他外还将为您提供所有索引定义,以便您可以恢复某些内容)

将大表备份到外部介质,然后截断并重新加载它也会起到与 vacuum full 相同的效果。

相关内容