我试图将 55GB SQL 文件写入我的数据库。以前每次都会崩溃。我删除了日志并进行了一些清理以使服务器运行,但事务从未完成。后来,我清空了我正在写入的所有表(我有一个备份),但即使在那之后,当我尝试写入 SQL 文件时,它在一系列成功插入后给了我这个错误 - 无法写入文件“pg_subtrans” /14C6" 位于偏移量 106496 处:设备上没有剩余空间。
有办法解决这个问题吗?是否还有与 PGSQL 相关的日志需要清理?我读过移动 pg_xlog 可能会有帮助?我应该尝试这个吗?
任何帮助将不胜感激。
谢谢!
df -h
为了可读性,从注释中重新格式化的输出。
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_zarkin-lv_root 574G 540G 4.3G 100% /
/dev/sda1 194M 35M 150M 19% /boot
tmpfs 5.9G 928K 5.9G 1% /dev/shm
/dev/mapper/smeidc0-smeisky0 7.2T 5.2T 2.0T 73% /smeidc/sky0
/dev/md0 7.2T 6.5T 400G 95% /smeidc/backup
答案1
我试图将 55GB SQL 文件写入我的数据库。 [...] 设备上没有剩余空间。有办法解决这个问题吗?
不。
在加载之前,您应该为您的应用程序提供足够的数据量。
我知道这个答案有点简洁,所以在下面添加一些新手级别的提示。
我的磁盘空间去哪儿了?
任何 postgres 表使用的总磁盘空间是物理模型的结果,包括:
- 包含表行的表块
- 索引块(如果有索引)
- 事务日志(又名 WAL 或 xlog,一段时间后就会消失)
表行的物理大小取决于数据类型以及数据压缩的程度。有大约。每行有 22 字节的开销,因此如果您有约 100 字节的原始压缩数据,则您的行将占用约 122 字节。
索引的物理大小更难预测,它取决于索引字段和索引类型。
如何在批量更新期间减少磁盘使用?
为了最大限度地减少磁盘开销,请遵循 PostgreSQL 文档中的官方性能提示:
批量更新后如何减少磁盘使用?
以下是一些有助于缩小 PostgreSQL 数据库大小的知识:
如果您无法完全清除表,并且需要删除大量行子集(50% 或更多),则运行以下命令非常有用
VACUUM FULL
或者CLUSTER
DELETE 之后的命令,用于收缩表。为事务日志(pg_xlog 目录)保留的数据量可以通过以下方式控制postgres 服务器设置
可以借助以下命令检测未使用的数据库、表和索引系统视图(pg_stat_database、pg_stat_user_tables、pg_stat_user_indexes)