Postgres - 如何检查可以恢复多少 OS space
Postgres - how to check how much OS space can be recovered
我有一个很大的表,其中有很多 DELETE。
我不时清理表以通过执行以下
将一些 space 恢复回系统
VACUUM FULL VERBOSE ANALYSE table_name
我知道 autovacuum 应该可以完成这项工作,但我看不到 space 随着时间的推移使用量减少。
Full Vacuum 这显然是一个相当漫长的过程,有时我意识到这不值得付出努力,因为我只恢复了 fre Gigs。其他时候我可以得到一打 space
所以我想知道是否有任何方法可以在 Postgres 中检查在进行任何操作之前可以将多少 space 释放回 OS/哪些表需要清理
我使用的是版本 12。
**** 编辑 ****
简而言之,我需要粗略估计浪费space我可以在吸尘后恢复。
我不确定“发布回 OS”。
但对于浪费的粗略估计 space 我会这样做:
SELECT
schemaname , relname ,
pg_total_relation_size(relid) AS total_size,
n_live_tup , n_dead_tup ,
n_dead_tup * 100.0 /
CASE n_live_tup WHEN 0 THEN 1 ELSE n_live_tup END AS dead_ratio,
pg_total_relation_size(relid) * n_dead_tup / CASE n_live_tup WHEN 0 THEN 1 ELSE n_live_tup END AS wasted_space
FROM
pg_catalog.pg_stat_all_tables
WHERE
schemaname = 'public'
ORDER BY
wasted_space DESC;
schemaname
relname
total_size
n_live_tup
n_dead_tup
dead_ratio
wasted_space
public
page_extract
409575424
92428
5831
6.3086943350499849
25838861
public
annotation_type
761856
1
6
600.0000000000000000
4571136
public
doc_dflt
38010880
15789
1120
7.0935461397175249
2696319
public
page
215359488
215567
1650
0.76542327907332755014
1648411
public
file
17784832
12995
1027
7.9030396306271643
1405542
逻辑:
- 获取死元组的比率
- 乘以关系大小
当然这是一个非常粗略的估计,实际结果会有所不同。
我有一个很大的表,其中有很多 DELETE。 我不时清理表以通过执行以下
将一些 space 恢复回系统 VACUUM FULL VERBOSE ANALYSE table_name
我知道 autovacuum 应该可以完成这项工作,但我看不到 space 随着时间的推移使用量减少。 Full Vacuum 这显然是一个相当漫长的过程,有时我意识到这不值得付出努力,因为我只恢复了 fre Gigs。其他时候我可以得到一打 space
所以我想知道是否有任何方法可以在 Postgres 中检查在进行任何操作之前可以将多少 space 释放回 OS/哪些表需要清理
我使用的是版本 12。
**** 编辑 ****
简而言之,我需要粗略估计浪费space我可以在吸尘后恢复。
我不确定“发布回 OS”。
但对于浪费的粗略估计 space 我会这样做:
SELECT
schemaname , relname ,
pg_total_relation_size(relid) AS total_size,
n_live_tup , n_dead_tup ,
n_dead_tup * 100.0 /
CASE n_live_tup WHEN 0 THEN 1 ELSE n_live_tup END AS dead_ratio,
pg_total_relation_size(relid) * n_dead_tup / CASE n_live_tup WHEN 0 THEN 1 ELSE n_live_tup END AS wasted_space
FROM
pg_catalog.pg_stat_all_tables
WHERE
schemaname = 'public'
ORDER BY
wasted_space DESC;
schemaname | relname | total_size | n_live_tup | n_dead_tup | dead_ratio | wasted_space |
---|---|---|---|---|---|---|
public | page_extract | 409575424 | 92428 | 5831 | 6.3086943350499849 | 25838861 |
public | annotation_type | 761856 | 1 | 6 | 600.0000000000000000 | 4571136 |
public | doc_dflt | 38010880 | 15789 | 1120 | 7.0935461397175249 | 2696319 |
public | page | 215359488 | 215567 | 1650 | 0.76542327907332755014 | 1648411 |
public | file | 17784832 | 12995 | 1027 | 7.9030396306271643 | 1405542 |
逻辑:
- 获取死元组的比率
- 乘以关系大小
当然这是一个非常粗略的估计,实际结果会有所不同。