我最近磁盘空间不足。我从 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 相同的效果。