Mat*_*att 5 disk-space postgresql-9.4
我正在运行一个命令来在一个相当大的表(大约 3.15 亿行)上创建一个新列。这使用了比我预期更多的磁盘空间,它已经完全填满了我的 SAN。命令失败ERROR: could not extend file "pg_tblspc/14342 etc.": No space left on device
我的问题是,当命令像这样失败时,命令的结果不会立即被丢弃吗?为什么当没有对表进行实际更改时,表空间仍然已满?
最后,当 postgres 不允许我执行任何其他命令(例如 VACUUM)时,再次释放空间的最佳方法是什么?
当一个命令像这样失败时,命令的结果不会立即被丢弃吗?
您需要了解数据库的逻辑结构和物理结构之间的区别。当您向表中插入 350m 行并且它失败时,逻辑更改将回滚。
但是当底层数据文件的大小必须增加以容纳 350m 行时,这种物理变化不会回滚。
为什么当没有对表进行实际更改时,表空间仍然已满?
在添加 3.5 亿行时,表空间增加了其数据文件以容纳新数据。删除数据后,空间仍然存在。删除不会缩小数据文件,它只会将空间标记为未使用,并将其留在那里以备后用。只有在 DBA 发出VACUUM FULL命令时,空间才会返回给操作系统。
最后,当 postgres 不允许我执行任何其他命令(例如 VACUUM)时,再次释放空间的最佳方法是什么?
这两个较旧的问题提供了解决此问题的多种有效策略:
我需要在没有可用磁盘空间的情况下运行 VACUUM FULL
| 归档时间: |
|
| 查看次数: |
20325 次 |
| 最近记录: |