PostgreSQL |设备上没有剩余空间

Posted

技术标签:

【中文标题】PostgreSQL |设备上没有剩余空间【英文标题】:Postgresql | No space left on device 【发布时间】:2018-11-22 20:16:07 【问题描述】:

我在 PostgreSQL 数据库上运行批处理时遇到空间问题。

但是,df -h 命令显示机器有足够的空间

以下是确切的错误

org.springframework.dao.DataAccessResourceFailureException: PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; ERROR: could not extend file "base/16388/16452": No space left on device
  Hint: Check free disk space.

是什么导致了这个问题?

编辑

postgres 数据目录为/var/opt/rh/rh-postgresql96/lib/pgsql/data

df -h /var/opt/rh/rh-postgresql96/lib/pgsql/data
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2      100G   63G   38G  63% /

【问题讨论】:

您的数据目录在哪里? (psql 中的show data_directory; 会告诉你) 数据目录是/var/opt/rh/rh-postgresql96/lib/pgsql/data。数据目录的当前大小为 15GB 您应该在df -h 的输出中包含 that 目录(顺便说一句:您也可以从控制台复制和粘贴 text。不需要使用图片) @a_horse_with_no_name : 编辑帖子并添加数据目录空间 而且,由于您使用的是 ORM 框架,因此 temptable-explosion 可能是某些 Carthesian 产品的结果,由您的查询中的逻辑错误引起。 【参考方案1】:

很可能有一些查询会创建临时填满您的硬盘的大型临时文件。这些文件将在查询完成(或查询失败)后立即删除,因此您查看时文件系统有足够的可用空间。

postgresql.conf中设置log_temp_files = 10240(并重新加载)记录所有超过10 MB的临时文件,然后您可以检查日志文件,看看是否确实是这个原因。

尝试找出错误的查询并修复它们。

如果临时文件不是问题,则可能是临时表。当数据库会话结束时,它们会自动删除。您的应用程序是否使用临时表?

另一种可能性可能是由数据库以外的其他东西创建的文件。

【讨论】:

如果 log_statement 设置为 none,log_temp_files 会起作用吗?目前,我只记录错误。 是的,该设置独立于log_statement 我将 log_temp_files 设置为 10240 但它不起作用。然后我将其设置为 0 并检测到 3-4 MB 的临时文件。每秒生成 5-6 个文件。 嗯。这并不能解释您的空间不足情况(但如果您的记忆情况允许,提出work_mem 可能是个好主意)。也许是临时表?我会更新答案。 @LaurenzAlbe 我正在使用 postgres 的 dockerised 实例,这在我的情况下如何工作?

以上是关于PostgreSQL |设备上没有剩余空间的主要内容,如果未能解决你的问题,请参考以下文章

pq:无法调整共享内存段的大小。设备上没有剩余空间

设备上没有剩余空间[关闭]

Java“设备上没有剩余空间”但磁盘上有足够的空间?

500错误:“设备上没有剩余空间”

pyspark JOB 失败并显示“设备上没有剩余空间”

java.io.IOException:Android 设备上没有剩余空间