VACUUM不会将磁盘空间返回给操作系统,相反,它会标记死行,以便在以后的写入中重用。我的服务器几乎耗尽了磁盘空间,然后运行DELETE FROM big_table来清除大约30%的行,然后是手动VACUUM。
没有空间返回给操作系统,这是很好的。在空间耗尽之前,我还能插入多少行?
由于明显的原因,df -h是一个无用的指标。是否有查询查看postgres的已使用磁盘空间与postgres的磁盘空间可用?
发布于 2019-10-31 12:19:37
pgstattuple和pg_自由地图这两个扩展可能会有所帮助。
pg_freespacemap更快,并且给出了一个空闲空间的视图,这与PostgreSQL自己在执行元组插入时如何搜索自由空间相匹配。
SELECT sum(avail) FROM pg_freespace('foo');但是它并没有给出平均元组长度的视图,这是将空间转换为元组所需的(假设新元组与现有元组的长度相同)。pgstattuples给出了计算当前平均长度的信息。
这两种方法都没有解释你的新行可能是一个尴尬的大小,不适合当前可用的漏洞。
另外,这两种方法对索引都没有很好的效果。新条目必须进入它们所属的索引中,即使其他页面中有大量的空闲空间。因此,索引空间的可重用性取决于新索引值与已删除的离开值之间的关系。
https://dba.stackexchange.com/questions/252293
复制相似问题