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 |设备上没有剩余空间的主要内容,如果未能解决你的问题,请参考以下文章