【发布时间】:2021-10-02 11:35:49
【问题描述】:
最近,在我的 PostgreSQL 日志中,我发现:
2021-09-30 08:33:37.242 CEST [4183904] 恐慌:无法写入文件“pg_wal/xlogtemp.4183904”:设备上没有剩余空间 2021-09-30 08:33:37.242 CEST [4183904] 上下文:关系基础/238033/270693 的写入块 413931 2021-09-30 08:33:46.609 CEST [1376] 日志:服务器进程(PID 4183904)被信号 6 终止:中止 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
所以也许,这个自动清理会将空间返回给操作系统,因为表末尾的一个或多个页面变得完全空闲,并且可以轻松获得排他表锁
提前谢谢你。
干杯,
阿迪尔
【问题讨论】:
-
您所看到的似乎与将空间归还给操作系统无关。试图在它们不相关时强迫它们相关是没有意义的。
-
好的,为什么autovaccum进程失败,尝试写入块,这就是问题所在,autovacuum会删除表和索引中的死行版本并标记可供将来重用的空间,这种行为(写入临时块)真空满时可见
-
去除死元组还是需要可恢复的,所以还是需要生成WAL。 PANIC 消息很清楚,它无法写入 WAL,因为“设备上没有剩余空间”。
-
感谢@jjanes 的支持,你说的对,明白了,vacuum 也生成WAL
标签: postgresql