c77_dbh/public.c77_dbh_get_vacuum_health.sql

41 lines
2.3 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION public.c77_dbh_get_vacuum_health()
RETURNS JSON AS $$
BEGIN
RETURN (
SELECT json_agg(
json_build_object(
'metric', 'Table Vacuum Health',
'table_name', table_name,
'status', CASE
WHEN bloat_estimate > 50 THEN 'Red'
WHEN bloat_estimate > 20 THEN 'Yellow'
ELSE 'Green'
END,
'severity', CASE
WHEN bloat_estimate > 50 THEN 5
WHEN bloat_estimate > 20 THEN 3
ELSE 1
END,
'insight', CASE
WHEN bloat_estimate > 50 THEN 'Table has critical bloat; vacuum and analyze urgently.'
WHEN bloat_estimate > 20 THEN 'Table has moderate bloat; consider vacuuming.'
ELSE 'Table is in good health.'
END,
'action', CASE
WHEN bloat_estimate > 50 THEN 'Run VACUUM FULL or CLUSTER; check autovacuum settings.'
WHEN bloat_estimate > 20 THEN 'Run VACUUM and ANALYZE; monitor autovacuum.'
ELSE 'No action needed.'
END,
'last_vacuum', last_vacuum::text,
'last_autovacuum', last_autovacuum::text,
'vacuum_count', vacuum_count,
'dead_tuples', dead_tuples,
'live_tuples', live_tuples,
'table_size', table_size::text || ' bytes',
'bloat_estimate', bloat_estimate::text || '%'
)
)
FROM public.c77_dbh_vacuum_stats
);
END;
$$ LANGUAGE plpgsql;