更新时间:2025-05-29 GMT+08:00
如何评估当前表/库是否需要VACUUM
GaussDB提供了pg_autovac_status系统函数来查询某个表是否达到VACUUM阈值,结合pg_class系统表可以查出top N 死行率的表。例如,查询top 10死行表的SQL语句如下:
SELECT C.oid AS relid, N.nspname AS schemaname, C.relname AS relname, C.reltuples AS n_rel_tup, pg_catalog.pg_stat_get_dead_tuples(C.oid) AS n_dead_tup, pg_catalog.pg_autovac_status(C.oid).doVacuum as need_Vacuum, CAST(n_dead_tup / C.reltuples AS decimal(10, 2)) AS dead_radio FROM pg_class C LEFT JOIN pg_index I ON C.oid = I.indrelid LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE C.relkind IN ('r') and C.reltuples > 0 GROUP BY C.oid, N.nspname, C.relname, C.reltuples, need_Vacuum order by dead_radio desc limit 10;
执行结果如下:
relid | schemaname | relname | n_rel_tup | n_dead_tup | need_vacuum | dead_radio -------+------------+-------------------------+-----------+------------+-------------+------------ 2604 | pg_catalog | pg_attrdef | 1 | 14 | | 14.00 2606 | pg_catalog | pg_constraint | 12 | 15 | | 1.25 3118 | pg_catalog | pg_foreign_table | 2 | 2 | | 1.00 3079 | pg_catalog | pg_extension | 24 | 15 | | .63 2601 | pg_catalog | pg_am | 11 | 4 | | .36 1417 | pg_catalog | pg_foreign_server | 4 | 1 | | .25 2610 | pg_catalog | pg_index | 421 | 82 | | .19 2328 | pg_catalog | pg_foreign_data_wrapper | 6 | 1 | | .17 2619 | pg_catalog | pg_statistic | 1231 | 187 | | .15 2609 | pg_catalog | pg_description | 4748 | 25 | | .01 (10 rows)
父主题: 常见问题