Ora*_*Dog 5 postgresql vacuum postgresql-12
有没有办法提前确定VACUUM FULL
特定表上的多少磁盘空间将返回给操作系统?因此,您可以决定这样做是否值得付出代价。
如果有一个简单的查询来为数据库/服务器中的每个表执行此操作(而不是单独执行每个表),则奖励。
您需要pgstattuple
扩展来获取可用空间量。
所以你可以跑
SELECT t.oid::regclass AS table_name,
s.table_len AS size,
dead_tuple_len + s.approx_free_space AS reclaimable
FROM pg_class AS t
CROSS JOIN LATERAL pgstattuple_approx(t.oid) AS s
WHERE t.relkind = 'r'
ORDER BY (s.dead_tuple_len::float8 + s.approx_free_space::float8)
/ (s.table_len::float8 + 1.0) DESC;
Run Code Online (Sandbox Code Playgroud)
其中size
和reclaimable
以字节为单位。
请注意,此查询有点昂贵。
这应该可以很好地估计可以回收的空间,但实际上它会稍微少一些,因为
每个 8kB 块中总是有一些空闲空间太小而无法容纳另一行
如果您有长时间运行的事务,一些死元组可能无法回收
归档时间: |
|
查看次数: |
220 次 |
最近记录: |