Skip to content

Commit b0082a6

Browse files
committed
Merge branch 'feature/dead-tuples-check' into 'main'
feat(checkup): F003 express check — dead tuples and per-table autovacuum overrides See merge request postgres-ai/postgresai!317
2 parents 73746da + c612dd5 commit b0082a6

10 files changed

Lines changed: 831 additions & 34 deletions

File tree

cli/lib/checkup-summary.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export function generateCheckSummary(checkId: string, report: any): CheckSummary
4040
case 'D001': return summarizeD001(nodeData);
4141
case 'D004': return summarizeD004(nodeData);
4242
case 'F001': return summarizeF001(nodeData);
43+
case 'F003': return summarizeF003(nodeData);
4344
case 'G001': return summarizeG001(nodeData);
4445
case 'G003': return summarizeG003(nodeData);
4546
default:
@@ -243,6 +244,35 @@ function summarizeF001(nodeData: any): CheckSummary {
243244
};
244245
}
245246

247+
function summarizeF003(nodeData: any): CheckSummary {
248+
const data = nodeData?.data || {};
249+
let flaggedCount = 0;
250+
let disabledCount = 0;
251+
252+
// Aggregate across all databases. Only non-tiny disabled-autovacuum tables
253+
// (autovacuum_disabled_flagged_count) trigger a warning - tiny tables with
254+
// autovacuum off are common and not worth alerting on.
255+
for (const dbData of Object.values(data)) {
256+
const dbEntry = dbData as any;
257+
flaggedCount += dbEntry.flagged_count || 0;
258+
disabledCount += dbEntry.autovacuum_disabled_flagged_count || 0;
259+
}
260+
261+
if (flaggedCount === 0 && disabledCount === 0) {
262+
return { status: 'ok', message: 'No significant dead tuple accumulation' };
263+
}
264+
265+
const parts: string[] = [];
266+
if (flaggedCount > 0) {
267+
parts.push(`${flaggedCount} table${flaggedCount > 1 ? 's' : ''} with excessive dead tuples`);
268+
}
269+
if (disabledCount > 0) {
270+
parts.push(`${disabledCount} table${disabledCount > 1 ? 's' : ''} with autovacuum disabled`);
271+
}
272+
273+
return { status: 'warning', message: parts.join(', ') };
274+
}
275+
246276
function summarizeG001(nodeData: any): CheckSummary {
247277
const data = nodeData?.data || {};
248278
const settingsCount = Object.keys(data).length;

0 commit comments

Comments
 (0)