首页 > 解决方案 > PostgreSQL:无法写入文件“pg_wal/xlogtemp 由于 autovacuum 没有剩余空间设备

问题描述

最近,在我的 PostgreSQL 日志中,我发现:

2021-09-30 08:33:37.242 CEST [4183904] 恐慌:无法写入文件“pg_wal/xlogtemp.4183904”:设备上没有剩余空间 2021-09-30 08:33:37.242 CEST [4183904] 上下文:写入关系 base/238033/270693 的块 413931 2021-09-30 08:33:46.609 CEST [1376] LOG:服务器进程(PID 4183904)被信号 6 终止:Aborted 2021-09-30 08:33:46.609 CEST [1376] 详细信息:失败的进程正在运行:autovacuum:VACUUM public.public_components_versions_files

我的问题是为什么进程 autovacuum 会导致写入关系块(表上的索引),知道 autovacuum 不会回收空间....对于信息库/238033/270693 是表 public_components_versions_files 的索引,所以 autovacuum (public_components_versions_files) 尝试写入索引块(public_components_versions_files 上的索引)

postrgesql 版本 12.8

<我在文档中看到:VACUUM 的标准形式删除了表和索引中的死行版本,并标记了可用空间以供将来重用。但是,它不会将空间返回给操作系统,除非在特殊情况下,表末尾的一个或多个页面变得完全空闲并且可以轻松获得排他表锁>

所以也许,这个 autovacuum 将空间返回给操作系统,因为表末尾的一个或多个页面变得完全空闲,并且可以轻松获得排他表锁

先感谢您。

干杯,

阿迪尔

标签: postgresql

解决方案


VACUUM写入表(它修改它),但它不扩展表。但是,由于所有数据修改都必须记录在 Write Ahead Log 中,VACUUM因此也必须记录 的修改。

PostgreSQL 写入事务日志的空间不足,而不是修改表。


推荐阅读