在没有扩展的 PostgreSQL 中查找臃肿的表和索引

Tom*_*Tom 4 postgresql postgresql-performance

我的表在白天变化很大,大量数据被删除、修改和插入。

我怀疑这些表上的表和索引可能会臃肿。

我已经看到 PostgreSQL 的扩展选项可以检查这一点,但我想避免在我的数据库中创建扩展。

如何获取此信息(表/索引臃肿)而不必使用 PostgreSQL 扩展(例如:pgstattuple),仅使用本机 PostgreSQL 12 功能。

小智 5

由于您已经在评论中得到了回答,因此最好使用标准pgstattuple扩展。如果由于某种原因您不想使用它,您可以看到近似的膨胀值,如下所示:

-- Perform ANALYZE on your table
ANALYZE <table_name>;

-- Get the number of deadlines in your tables.
select schemaname,
relname,
pg_size_pretty(pg_relation_size(schemaname|| '.' || relname)) as size,
n_live_tup,
n_dead_tup,
CASE WHEN n_live_tup > 0 THEN round((n_dead_tup::float / 
n_live_tup::float)::numeric, 4) END AS dead_tup_ratio,
last_autovacuum,
last_autoanalyze
from pg_stat_user_tables
order by dead_tup_ratio desc NULLS LAST;
Run Code Online (Sandbox Code Playgroud)

越高dead_tup_ratio,表的膨胀程度就越高。但这些都是在统计过程中收集到的近似数据!确定膨胀的最佳方法是使用扩展pgstattuple